Hi,
ich arbeite mit Hibernate 3. Zu meinem Problem hab ich in diesem Forum schon gesucht aber noch keine zufriedenstellende Lösung gefunden. Ich hab folgendes Problem:
Ich habe zwei Tabellen auf zwei unterschiedlichen Datenbanken:
Tabelle1: Sortiment auf Datenbank MyData
Tabelle2: Mandant auf Datenbank MyDataConf
Zwischen diesen Tabellen gibt es eine 1:N-Beziehung, Sortiment speichert also IDs aus Mandant.
Zwei Configurations-Dateien hab ich schon angelegt:
Code:
SessionFactory sessionMYC = new Configuration().configure("MyDataConf.cfg.xml").buildSessionFactory();
SessionFactory sessionMY = new Configuration().configure("MyData.cfg.xml").buildSessionFactory();
Die Klasse Sortiment:
Code:
public class Sortiment implements java.io.Serializable {
private long identNr;
private List<Mandant> mandant = new ArrayList<Mandant>();
private String sortiment;
public Sortiment() {
}
public Sortiment(List <Mandant> mandant, String sortiment) {
this.mandant = mandant;
this.sortiment = sortiment;
}
public Sortiment(long identNr, List <Mandant> mandant, String sortiment) {
this.identNr = identNr;
this.mandant = mandant;
this.sortiment = sortiment;
}
public long getIdentNr() {
return identNr;
}
public void setIdentNr(long identNr) {
this.identNr = identNr;
}
public List<Mandant> getMandant() {
return mandant;
}
public void setMandant(List<Mandant> mandant) {
this.mandant = mandant;
}
public String getSortiment() {
return sortiment;
}
public void setSortiment(String sortiment) {
this.sortiment = sortiment;
}
}
Und die Klasse Mandant:
Code:
public class Mandant implements java.io.Serializable {
private int typKennzeichen;
public Mandant() {
}
public Mandant(int typKennzeichen) {
this.typKennzeichen = typKennzeichen;
}
public Mandant(int typKennzeichenr) {
this.typKennzeichen = typKennzeichen;
}
public int getTypKennzeichen() {
return this.typKennzeichen;
}
public void setTypKennzeichen(int typKennzeichen) {
this.typKennzeichen = typKennzeichen;
}
}
Dazu dann noch die Mapping-Datei für Sortiment:
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="MyInfo.Sortiment" table="Sortiment">
<composite-id>
<key-property name="identNr" type="long">
<column name="IdentNr" />
</key-property>
</composite-id>
<list name="mandant" cascade="all">
<key column="Mandant"/>
<index column="typKennzeichen"/>
<one-to-many class="conf.Mandant"/>
</list>
<property name="sortiment" type="string">
<column name="Sortiment" length="32" />
</property>
</class>
</hibernate-mapping>
möchte ich jetzt z.B. mit
Code:
System.out.println("Groesse: " + sortiment.getMandant().size());
auf die Größe der Liste zugreifen bekomme ich folgenden Fehler:
Code:
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not initialize a collection: [MyData.Sortiment.mandant#component[identNr]{identNr=967987}]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.loadCollection(Loader.java:2001)
at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:36)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:565)
at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1716)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:109)
at org.hibernate.collection.PersistentList.size(PersistentList.java:91)
at MyDataEdit.main(MyInfoEdit.java:206)
Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'MyData.Mandant' doesn't exist
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2941)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3249)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1268)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1403)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
at org.hibernate.loader.Loader.doQuery(Loader.java:674)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.loadCollection(Loader.java:1994)
... 9 more
Das Problem ist, dass Hibernate jetzt Mandant in MyData und nicht in MyDataConf sucht. Wie bekomme ich eine Verbindung zwischen beiden Datenbanken hin?