ich den folgenden Code bin mit meinem Hibernate Search Index zu initialisieren:Getting a TransientObjectException wenn mein ersten Index erstellen
EntityManager em = ...
FullTextEntityManager fullTextEM = Search.getFullTextEntityManager(em);
fullTextEM.createIndexer().startAndWait();
Nun, wenn ich diesen Code ausführen, erhalte ich die folgende Ausnahme:
ERROR: HSEARCH000058: HSEARCH000116: Unexpected error during MassIndexer operation
org.hibernate.TransientObjectException: cannot lock an unsaved transient instance: com.example.hs.model.Division
at org.hibernate.event.internal.DefaultLockEventListener.onLock(DefaultLockEventListener.java:75)
at org.hibernate.internal.SessionImpl.fireLock(SessionImpl.java:724)
at org.hibernate.internal.SessionImpl.fireLock(SessionImpl.java:717)
at org.hibernate.internal.SessionImpl.access$1700(SessionImpl.java:170)
at org.hibernate.internal.SessionImpl$LockRequestImpl.lock(SessionImpl.java:2276)
at org.hibernate.search.batchindexing.impl.EntityConsumerLuceneWorkProducer.indexAllQueue(EntityConsumerLuceneWorkProducer.java:130)
at org.hibernate.search.batchindexing.impl.EntityConsumerLuceneWorkProducer.run(EntityConsumerLuceneWorkProducer.java:102)
at org.hibernate.search.batchindexing.impl.OptionallyWrapInJTATransaction.run(OptionallyWrapInJTATransaction.java:112)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:680)
In diesem Fall enthält die Klasse com.example.hs.model.Division
zwei Annotationen für Methoden, die einen Rückgabewert von HashMap
berechnen. Die HashMap
wird über Hibernate abgerufen wie folgt:
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "division_id", referencedColumnName = "id")
@MapKey(name = "language")
@Field(name="name")
@FieldBridge(impl = com.example.hs.search.LanguageDivisionTextBridge.class)
protected Map<Language, DivisionText> getDivisionTextMap() {
return divisionTextMap;
}
Wie Sie sehen können, habe ich eine benutzerdefinierte bin mit FieldBridge
in der Abbildung zu helfen. Die DivisionText
Klasse ist auch mit der @Indexed
Annotation markiert und wird erfolgreich indiziert.
https://github.com/jsvazic/hibernate-search-example
Jede Hilfe willkommen wäre sehr:
Die vollständigen Quell finden werden.
Dank Marko, das hat perfekt funktioniert. –
Ich sprach zu früh. Scheint, dass das Problem immer noch existiert. Ich habe das Ohr eines Hibernate Search-Teams, also hoffe ich, dass sie helfen können. Beispielcode finden Sie unter [https://github.com/jsvazic/hibernate-search-example](https://github.com/jsvazic/hibernate-search-example) –
Nur ein kurzes Update, aber ich habe hat den Beispielcode viel, viel einfacher angepasst. Es scheint, dass das Problem speziell in der Division-Klasse liegt, da DivisionText einwandfrei funktioniert, d. H. Wenn ich die @Indexed-Annotation für Division hinzufüge, schlägt sie fehl. –