求助:一对一外键与主键双向关联问题,谢谢大家
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 (?, ?, ?, ?, ?, ?, ?, ?, ?)
怎么才能两张表同时插入?谢谢各位大侠帮忙!!!