Hibernate多对多+附加属性表

时间:2012-02-09 08:57:18

标签: mysql hibernate java-ee jdbc

我有一个servlet,它通过hibernate连接到MySQL数据库。

我得到以下例外情况:


    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'berelhetoe0_.pk.terem' in 'field list'
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
        at com.mysql.jdbc.Util.getInstance(Util.java:386)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2293)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
        ... 33 more

这就是我的数据库构建方式:

 
    DROP TABLE IF EXISTS berelheto;
    CREATE TABLE berelheto (
      TeremID int(11) NOT NULL,
      EszkozID int(11) NOT NULL,
      Available int(11) DEFAULT NULL,
      PRIMARY KEY (TeremID,EszkozID)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `eszkozok`;
CREATE TABLE `eszkozok` (
  `EszkozID` int(11) NOT NULL AUTO_INCREMENT,
  `EszkozNev` varchar(1000) NOT NULL,
  UNIQUE KEY `EszkozID` (`EszkozID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;


DROP TABLE IF EXISTS `termek`;

CREATE TABLE `termek` (
  `TeremID` int(11) NOT NULL AUTO_INCREMENT,
  `TeremNev` varchar(1000) DEFAULT NULL,
  `Path` varchar(1000) DEFAULT NULL,
  `HetkozFrom` time DEFAULT NULL,
  `HetkozTo` time DEFAULT NULL,
  `SzombatFrom` time DEFAULT NULL,
  `SzombatTo` time DEFAULT NULL,
  `VasarnapFrom` time DEFAULT NULL,
  `VasarnapTo` time DEFAULT NULL,
  UNIQUE KEY `TeremID` (`TeremID`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

berelheto

我的xml文件:

Terem.hbm.xml:

 berelheto
TeremID

Eszkoz.hbm.xml:

 EszkozID
Available

Berelheto.hbm.xml:

 TeremID
EszkozID

最后是我的java课程:

Terem.java:

 DROP TABLE IF EXISTS `eszkozok`;
CREATE TABLE `eszkozok` (
  `EszkozID` int(11) NOT NULL AUTO_INCREMENT,
  `EszkozNev` varchar(1000) NOT NULL,
  UNIQUE KEY `EszkozID` (`EszkozID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;


DROP TABLE IF EXISTS `termek`;

CREATE TABLE `termek` (
  `TeremID` int(11) NOT NULL AUTO_INCREMENT,
  `TeremNev` varchar(1000) DEFAULT NULL,
  `Path` varchar(1000) DEFAULT NULL,
  `HetkozFrom` time DEFAULT NULL,
  `HetkozTo` time DEFAULT NULL,
  `SzombatFrom` time DEFAULT NULL,
  `SzombatTo` time DEFAULT NULL,
  `VasarnapFrom` time DEFAULT NULL,
  `VasarnapTo` time DEFAULT NULL,
  UNIQUE KEY `TeremID` (`TeremID`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

Eszkoz.java:

 
    

<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="beans.Terem" table="termek">
        <id name="TeremID">
            <generator class="native"/>
        </id>
        <property name="TeremNev" />
        <property name="Path" />
        <property name="HetkozFrom" />
        <property name="HetkozTo" />
        <property name="SzombatFrom" />
        <property name="SzombatTo" />
        <property name="VasarnapFrom" />
        <property name="VasarnapTo" />

        <set name="Foglalasok" table="foglalt">
            <key>
                <column name="TeremID" not-null="true" />
            </key>
            <one-to-many class="beans.Foglalas" />
        </set>

        <set name="Tipusok" table="milyen">
            <key column="TeremID" />
            <many-to-many column="TeremTipusID" class="beans.TeremTipus" />
        </set>

        <set name="BerelhetoEszkozok" table="berelheto" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="pk.terem" />
            </key>
            <one-to-many class="beans.Berelheto" />
        </set>
    </class>
</hibernate-mapping>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="beans.Terem" table="termek"> <id name="TeremID"> <generator class="native"/> </id> <property name="TeremNev" /> <property name="Path" /> <property name="HetkozFrom" /> <property name="HetkozTo" /> <property name="SzombatFrom" /> <property name="SzombatTo" /> <property name="VasarnapFrom" /> <property name="VasarnapTo" /> <set name="Foglalasok" table="foglalt"> <key> <column name="TeremID" not-null="true" /> </key> <one-to-many class="beans.Foglalas" /> </set> <set name="Tipusok" table="milyen"> <key column="TeremID" /> <many-to-many column="TeremTipusID" class="beans.TeremTipus" /> </set> <set name="BerelhetoEszkozok" table="berelheto" inverse="true" lazy="true" fetch="select"> <key> <column name="pk.terem" /> </key> <one-to-many class="beans.Berelheto" /> </set> </class> </hibernate-mapping>

Berelheto.java:

  

<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="beans.Eszkoz" table="eszkozok">
        <id name="EszkozID">
            <generator class="native"/>
        </id>
        <property name="EszkozNev" />

        <set name="Termeim" table="berelheto" >
            <key> 
                <column name="pk.eszkoz" not-null="true" />
            </key>
            <one-to-many class="beans.Berelheto"/>
         </set>
    </class>
</hibernate-mapping>

BerelhetoID.java:

 <!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="beans.Eszkoz" table="eszkozok">
        <id name="EszkozID">
            <generator class="native"/>
        </id>
        <property name="EszkozNev" />

        <set name="Termeim" table="berelheto" >
            <key> 
                <column name="pk.eszkoz" not-null="true" />
            </key>
            <one-to-many class="beans.Berelheto"/>
         </set>
    </class>
</hibernate-mapping>

任何观察,更正都非常受欢迎!

1 个答案:

答案 0 :(得分:0)

我在休眠方面不是那么有经验。 但是当它找不到列时,我在Berelheto.java中寻找错误 尝试类似的事情:

@Table(name = "berelheto", catalog="sport")
@AssociationOverrides({
        @AssociationOverride(name = "TeremID", joinColumns = @JoinColumn(name = "TeremID")),
        @AssociationOverride(name = "pk.eszkoz", joinColumns = @JoinColumn(name = "EszkozID")) })