求助:一对一外键与主键双向关联问题,谢谢大家

65426 2006-03-15 10:21:06
在论坛曾有人发过相同的问题,他没有把解决问题的方法贴出来:http://community.csdn.net/Expert/topic/4441/4441578.xml?temp=.163067

我也有一个双向关联的一对一的问题,我的运行环境:JDK1.4.0,oracle9i,TOMCAT5.5,Hibernate3.1.be
由于代码太长,我中间删除了一点
LMCustomer.java:
public class LMCustomer implements Serializable {

private static final long serialVersionUID = 1L;

/** identifier field */
private Integer customerId;

/** persistent field */
private String name;

/** nullable persistent field */
private com.rfcyber.licensemanager.domain.LMGeneral lmGeneral;
}
LMCustomer.hbm.xml:
<class
name="com.rfcyber.licensemanager.domain.LMCustomer"
table="LM_CUSTOMER"
>

<id
name="customerId"
type="java.lang.Integer"
column="CUSTOMER_ID"
>
<generator class="sequence">
<param name="sequence">lm_customer_seq</param>
</generator>
</id>

..............................

<!-- associations -->
<!-- bi-directional one-to-one association to LmGeneral -->
<one-to-one
name="lmGeneral"
class="com.rfcyber.licensemanager.domain.LMGeneral"
constrained="true"
property-ref="lmCustomer"
/>

</class>
</hibernate-mapping>
==========================================================================================
LMGeneral.java
public class LMGeneral implements Serializable {

private static final long serialVersionUID = 1L;

/** identifier field */
private Integer generalId;

.......................
/** persistent field */
private String osName;

/** nullable persistent field */
private com.rfcyber.licensemanager.domain.LMCustomer lmCustomer;

...................................

public com.rfcyber.licensemanager.domain.LMCustomer getLmCustomer() {
return this.lmCustomer;
}

public void setLmCustomer(com.rfcyber.licensemanager.domain.LMCustomer lmCustomer) {
this.lmCustomer = lmCustomer;
}

}
==========================================================================================
LMGeneral.hbm.xml:
<class
name="com.rfcyber.licensemanager.domain.LMGeneral"
table="LM_GENERAL"
>

<id
name="generalId"
type="java.lang.Integer"
column="GENERAL_ID"
>
<generator class="sequence">
<param name="sequence">lm_general_seq</param>
</generator>
</id>

...............


<property
name="osName"
type="java.lang.String"
column="OS_NAME"
not-null="true"
length="64"
/>

<!-- associations -->
<!-- bi-directional one-to-many association to LmEpayserver
<set
name="lmEpayservers"
lazy="true"
inverse="true"
>
<key>
<column name="LICENSE_ID" />
</key>
<one-to-many
class="com.rfcyber.licensemanager.domain.LMEpayserver"
/>
</set>
-->
<one-to-one
name="lmEpayservers"
class="com.rfcyber.licensemanager.domain.LMEpayserver"
property-ref="lmGeneral"
/>
<!-- bi-directional one-to-one association to LmCustomer -->
<many-to-one
name="lmCustomer"
class="com.rfcyber.licensemanager.domain.LMCustomer"
foreign-key="CUSTOMER_ID"
cascade="save-update"
unique="true"
>
<column name="CUSTOMER_ID" />
</many-to-one>

</class>
</hibernate-mapping>
=========================================================================================
测试:
public void testsaveLmCustomer(){

try{
customer.setName("stephen lei");
customer.setAddress1("sz city1");
customer.setAddress2("sz city2");
customer.setEmail("stephen.lei@rfcyber.com");
customer.setCdSerialNo("pac0001");

//option general
general.setName("sabrina wang");
general.setIssuerDate(new Date());
general.setStartDate(new Date());
general.setProductType("A");
general.setMac("MAC");

general.setLmCustomer(customer);

customer.setLmGeneral(general);
customerDAO.saveLMCustomer(customer);

}catch(Exception ex){
ex.printStackTrace();
}

}
=========================================================================================
问题:现在插入时只能插入一张表:LM_CUMSTOMER,而LM_GENERAL 表不能插入,后台打印是:
Hibernate: select lm_customer_seq.nextval from dual
Hibernate: insert into LM_CUSTOMER (NAME, CD_SERIAL_NO, EMAIL, ADDRESS1, ADDRESS2, CITY, STATE, ZIPCODE, CUSTOMER_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?)
怎么才能两张表同时插入?谢谢各位大侠帮忙!!!
...全文
103 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
65426 2006-03-17
  • 打赏
  • 举报
回复
问题解决了,把constrained="true"去掉就行。,谢谢yingtju(蚂蚁)
yingtju 2006-03-16
  • 打赏
  • 举报
回复
LMCustomer.hbm.xml:
<one-to-one cascade="all" ...>

下面的General的映射也没定义cascade
考虑一下都写上把
65426 2006-03-15
  • 打赏
  • 举报
回复
各位大哥,大姐,怎么没人拔刀相助呢?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧