如何在休眠中添加键约束?

时间:2012-01-23 21:12:13

标签: java mysql hibernate foreign-keys constraints

我有以下* .hbm.xml文件:

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

<hibernate-mapping package="com.models.results">
<class name="TestResult" table="testcaseresults">
    <id name="testCaseResultsId" type="java.lang.Integer" column="testcaseresultsid">
        <generator class="native"/>
    </id>

    <property name="start" type="java.sql.Timestamp" column="starttime"/>
    <property name="end" type="java.sql.Timestamp" column="endtime"/>
    <property name="results" type="java.lang.String" column="results"/>
    <property name="passed" type="java.lang.Integer" column="passed"/>

    <join table="testcase">
        <key column="testcaseid"/>
        <property name="testTitle" column="testcasename"/>
        <property name="tfsid" column="tfsid"/>
    </join>
    <join table="selwowusers">
        <key column="userid"/>
        <property name="tester" column="useremail" type="java.lang.String"/>

    </join>


</class>

现在,我的问题是“testcase”和“selwowusers”表有外键约束(自己)。我究竟如何编写一对多属性?我是hibernate的新手,在线教程也没有过于描述性。

当我按原样运行应用程序时,我收到以下错误:

ERROR: HHH000388: Unsuccessful: alter table testcase add index FKBBAC26C2C073639B (testcaseid), add constraint FKBBAC26C2C073639B foreign key (testcaseid) references testcaseresults (testcaseresultsid)
Jan 23, 2012 4:08:57 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
ERROR: Cannot add or update a child row: a foreign key constraint fails (`newseleniumwowmatrix`.`#sql-6379_4868`, CONSTRAINT `FKBBAC26C2C073639B` FOREIGN KEY (`testcaseid`) REFERENCES `testcaseresults` (`testcaseresultsid`))
Jan 23, 2012 4:08:57 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute

感谢。

2 个答案:

答案 0 :(得分:0)

Hibernate允许您定义关系,它不能强制执行约束。正如您可能观察到的,它是一个映射工具,用于将java对象与数据库表映射。它不适用于定义数据模型。

-JavaJigsaw.com

答案 1 :(得分:0)

一对多可以表示为来自TestCase的多对一​​

&lt; class name =“Testcase”table =“testcase”&gt;  &lt; many-to-one name =“testcaseID”class =“TestResult”column =“testcaseid”/&gt;