Hi,
ich hab schon in Hibernate-Forum gepostet und leider keine Antwort bekommen.
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:
Die Klasse Sortiment:
Und die Klasse Mandant:
Dazu dann noch die Mapping-Datei für Sortiment:
möchte ich jetzt z.B. mit
auf die Größe der Liste zugreifen bekomme ich folgenden Fehler:
Das Problem ist, dass Hibernate jetzt Mandant in MyData und nicht in MyDataConf sucht. Wie bekomme ich eine Verbindung zwischen beiden Datenbanken hin?
ich hab schon in Hibernate-Forum gepostet und leider keine Antwort bekommen.
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?