Ruhezustand 6 – IdentifierGenerator – Standardgenerator, der an NULL-IDs delegiert
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; } }
und seine Verwendung
@GenericGenerator( name = "CustomIdGenerator", type = domain.util.CustomIdGenerator.class ) public class Tournament { @Id @GeneratedValue( strategy = GenerationType.IDENTITY, generator = "CustomIdGenerator" ) private Long id; }
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; } }
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)
