Inhaltsverzeichnis
Frageninhalt
Workaround
Heim Java Ruhezustand 6 – IdentifierGenerator – Standardgenerator, der an NULL-IDs delegiert

Ruhezustand 6 – IdentifierGenerator – Standardgenerator, der an NULL-IDs delegiert

Feb 14, 2024 pm 08:48 PM

Eine der neuen Funktionen in Hibernate 6 ist die Einführung der IdentifierGenerator-Schnittstelle. Im Standardgenerator delegiert Hibernate 6 an NULL ID als Standardimplementierung. Mit dieser neuen Funktion können Entwickler die Identitätsgenerierung für Entitäten flexibler anpassen. In diesem Artikel stellt PHP-Editor Yuzai die Verwendung und Beispiele von IdentifierGenerator in Hibernate 6 vor.

Frageninhalt

Ich habe eine spezielle Anforderung, die ID einer Entität basierend auf einer Zuordnungstabelle in einem alten System manuell festzulegen und zu speichern. Ich habe vor dem Upgrade auf Hibernate 6 eine Klasse erstellt, die diese Funktionalität implementiert.

Die Grundlage dieser Klasse besteht darin, die übergebene ID (d. h. ungleich Null) zu verwenden oder Hibernate seinen Standardmechanismus zum Generieren des Werts verwenden zu lassen.

Ich hatte eine funktionierende Version des Codes für Hibernate

@slf4j
public class customidgenerator implements identifiergenerator
{

    @override
    public serializable generate( final sharedsessioncontractimplementor session, final object obj )
    {

        serializable id = session.getentitypersister( null, obj ).getclassmetadata().getidentifier( obj, session );
        if ( id == null || long.parselong( id.tostring() ) <= 0 )
        {
            // if the id is not set or is less than or equal to 0, let hibernate generate it.
            log.debug( "hibernate will generate a new id for entity [{}]", obj.getclass().getname() );
            id = super.generate( session, obj ); // cannot do this anymore!
        }
        else
        {
            log.debug( "using provided id [{}] for entity [{}]", id, obj.getclass().getname() );
        }

        return id;
    }
    
}
Nach dem Login kopieren

und seine Verwendung

@GenericGenerator( name = "CustomIdGenerator",
                   type = domain.util.CustomIdGenerator.class )
public class Tournament
{
    @Id
    @GeneratedValue( strategy = GenerationType.IDENTITY, generator = "CustomIdGenerator" )
    private Long id;
}
Nach dem Login kopieren

Irgendwelche Ideen, wie man diesen Code an die Arbeit mit Hibernate 6 anpassen kann?

Workaround

Ich denke, als Lösung können Sie so etwas wie die nächste Methode anwenden, da Sie die Sitzung haben.

@Slf4j
public class CustomIdentifierGenerator implements IdentifierGenerator {

  @Override
  public Serializable generate(SharedSessionContractImplementor session, Object obj) {

    Serializable id = session.getEntityPersister( null, obj ).getClassMetadata().getIdentifier( obj, session );
    if (id == null || Long.parseLong(id.toString()) <= 0) {
      // If the ID is not set or is less than or equal to 0, let Hibernate generate it.
      log.debug("Hibernate will generate a new ID for entity [{}]", obj.getClass().getName());

      String sqlQuery = "SELECT MAX(id) FROM Tournament";
      Optional<Long> query = session.createQuery(sqlQuery, Long.class).getResultStream().findFirst();
      id = query.get() +  1;

    } else {
      log.debug("Using provided ID [{}] for entity [{}]", id, obj.getClass().getName());
    }

    return id;
  }
}
Nach dem Login kopieren

Oder verwenden Sie session.createnativequery() und extrahieren Sie den nächsten Wert der Sequenz.

Das obige ist der detaillierte Inhalt vonRuhezustand 6 – IdentifierGenerator – Standardgenerator, der an NULL-IDs delegiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)