2 Stimmen

Hibernate 4.1.7.Final mit unbekannter Tabellen-ID in der Sortierzuordnung

Ich versuche, von Hibernate 4.0.1 auf 4.1.7.Final zu aktualisieren und erhalte die folgenden Fehlermeldungen:

Fehler beim Starten des Dienstes jboss.persistenceunit."****/********": org.jboss.msc.service.StartException im Dienst jboss.persistenceunit."*****": Starten des Dienstes fehlgeschlagen
bei org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1767) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
bei java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_35]
bei java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_35]
bei java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_35] 

Verursacht durch: javax.persistence.PersistenceException: [PersistenceUnit: myatrium_intranet] EntityManagerFactory konnte nicht erstellt werden
bei org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915)
bei org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
bei org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:74)
bei org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:162)
bei org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:85)
bei org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
bei org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
... 3 weitere
Verursacht durch: org.hibernate.HibernateException: Tabelle konnte nicht gefunden werden, die die Spalte [id] im order-by Mapping besitzt
bei org.hibernate.persister.entity.JoinedSubclassEntityPersister.determineTableNumberForColumn(JoinedSubclassEntityPersister.java:854)
bei org.hibernate.persister.entity.AbstractEntityPersister.getTableAliasForColumn(AbstractEntityPersister.java:4865)
bei org.hibernate.persister.collection.AbstractCollectionPersister$StandardOrderByAliasResolver.resolveTableAlias(AbstractCollectionPersister.java:1930)
bei org.hibernate.sql.ordering.antlr.OrderByFragmentTranslator$StandardOrderByTranslationImpl.injectAliases(OrderByFragmentTranslator.java:106)
bei org.hibernate.persister.collection.AbstractCollectionPersister.getSQLOrderByString(AbstractCollectionPersister.java:751)
bei org.hibernate.loader.JoinWalker.orderBy(JoinWalker.java:910)
bei org.hibernate.loader.JoinWalker.orderBy(JoinWalker.java:822)
bei org.hibernate.loader.AbstractEntityJoinWalker.initStatementString(AbstractEntityJoinWalker.java:123)
bei org.hibernate.loader.AbstractEntityJoinWalker.initStatementString(AbstractEntityJoinWalker.java:108)
bei org.hibernate.loader.AbstractEntityJoinWalker.initAll(AbstractEntityJoinWalker.java:90)
bei org.hibernate.loader.AbstractEntityJoinWalker.initAll(AbstractEntityJoinWalker.java:77)
bei org.hibernate.loader.entity.CascadeEntityJoinWalker.(CascadeEntityJoinWalker.java:51)
bei org.hibernate.loader.entity.CascadeEntityLoader.(CascadeEntityLoader.java:46)
bei org.hibernate.persister.entity.AbstractEntityPersister.createLoaders(AbstractEntityPersister.java:3785)
bei org.hibernate.persister.entity.AbstractEntityPersister.postInstantiate(AbstractEntityPersister.java:3722)
bei org.hibernate.persister.entity.SingleTableEntityPersister.postInstantiate(SingleTableEntityPersister.java:1018)
bei org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:457)
bei org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1750)
bei org.hibernate.ejb.EntityManagerFactoryImpl.(EntityManagerFactoryImpl.java:94)
bei org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
... 9 weitere

Ich habe keine Ahnung, von welcher Tabelle Hibernate spricht. Gibt es eine Möglichkeit, das herauszufinden? Muss ich etwas Besonderes hinzufügen, damit es funktioniert? Beachten Sie, dass meine Datenstruktur für 4.0.1 funktionierte.

Jede Hilfe wäre sehr geschätzt.

Update: Ich habe das Debuggen für Hibernate aktiviert und frage mich, wie ich herausfinden kann, welcher Klasse das Problem verursacht. Gibt es eine Möglichkeit zu erfahren, aus welcher Klasse es stammt? Nur zur Erinnerung, der Fehler stammt von den vorab geladenen Abfragen, die Hibernate vor dem Starten des Servers durchführt.

Vielen Dank im Voraus.

4voto

Scott Coldwell Punkte 41

Ich habe endlich das Szenario herausgefunden, in dem dies passiert, und werde bald einen Fehlerbericht bei Hibernate einreichen und ihn hier verlinken, wenn ich das tue. Wenn Sie Entitäten verwenden, die die Vererbungsstrategie JOINED verwenden und die Elternentität als Sammlung in einer anderen Entität referenzieren und eine Sortierung nach der Sammlung hinzufügen, wird der Fehler, den der OP gepostet hat, ausgelöst.

Zum Beispiel:

@Entity
@Table(name = "Joined_Parent")
@Inheritance(strategy = InheritanceType.JOINED)
public class JoinedParent
{
    @Id
    @GeneratedValue
    @Column(name = "id")
    private Integer id;

    @ManyToOne(cascade = {CascadeType.ALL})
    @JoinColumn(name = "other_entity_id", nullable = false)
    private OtherEntity otherEntity;
}

@Entity
@Table(name = "Joined_Child")
@PrimaryKeyJoinColumn(name = "id")
public class JoinedChild
    extends JoinedParent
{
}

@Entity
@Table(name = "Other_Entity")
public class OtherEntity
{
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "otherEntity", orphanRemoval = true)
    @OrderBy("id ASC") // <-- dies verursacht den Fehler
    private List items = new ArrayList();
}

Ich bin mir nicht sicher, ob dies nur passiert, wenn Sie auf die Elternklasse als Sammlung verweisen, oder ob es auch mit der Kindklasse passiert. Ich weiß auch nicht, ob eine bidirektionale Beziehung damit zu tun hat. Ich habe hier einen Fehlerbericht eingereicht https://hibernate.onjira.com/browse/HHH-7630

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X