csdn的blog 实在是没法用了,每次想上去的时候就给我 internal error 汗死了。前阵子弄hibernate 但是及联插入的问题一直没有得到解决,今天终于有点头绪了,在一定的配置条件能够实现一对多的及联插入了:
many 的类如下:
public class Many
{
private int manyId;
private One one;
public int getManyId()
{
return manyId;
}
public void setManyId(int manyId)
{
this.manyId = manyId;
}
public One getOne()
{
return one;
}
public void setOne(One one)
{
this.one = one;
}
}
one 的类如下:
public class One
{
private String oneId;
private Set manys = new HashSet();
public String getOneId()
{
return oneId;
}
public void setOneId(String oneId)
{
this.oneId = oneId;
}
public Set getManys()
{
return manys;
}
public void setManys(Set manys)
{
this.manys = manys;
}
}
以上两个类只是简单的列出了一对多关系的最基本字段,他们的配置文件如下:
many.hbm.xml
<hibernate-mapping>
<class name = "Many" table = "MANY" >
<id name = "manyId" type = "int" unsaved-value="0"> <!-- unsaved-value="0" must-->
<column name = "MANYID" sql-type="integer" not-null="true" ></column>
<generator class = "increment"></generator> <!-- generator class must increment-->
</id>
<many-to-one name = "one" class="One" >
<column name = "FONEID" not-null = "false" ></column>
</many-to-one>
</class>
</hibernate-mapping>
这个配置文件比较重要,原来没有实现及联主要是没有 在id里加 unsaved-value="0"以及把pk 的产程方式设为 increment
one.hbm.xml:
<hibernate-mapping>
<class name = "One" table = "ONE">
<id name = "oneId" type = "string">
<column name = "ONEID" sql-type = "varchar(10)" not-null = "true"></column>
<generator class = "assigned"></generator>
</id>
<set name = "manys" table = "MANY" cascade= "save-update" inverse = "false">
<key column = "FONEID"></key>
<one-to-many class = "Many"></one-to-many>
</set>
</class>
</hibernate-mapping>
这样的请款比较奇怪,不可能只让用户使用increment的pk 才能实现及联,一定还有哪里没有配置好,hibernate 太赞勒