Hibernate中的对象one-to-one关系

(1) 通过主健参考,限制2个数据表中的主健使用相同的值

create table CUSTOMER(
ID bigint not null auto_increment,
NAME varchar(15),
primary key (ID)
);

create table ADDRESS(
ID bigint not null auto_increment,
STREET varchar(128),
CITY varchar(128),
PROVINCE varchar(128),
primary key (ID)
);

Customer.hbm.xml:

<id name="Id" type="java.lang.Long" column="ID">
	<generator class="native"/>
</id>

<one-to-one name="address" 
            class="Address" 
            cascade="all"/>


Address.hbm.xml:

<id name="Id" type="java.lang.Long"	column="ID">
	 <generator class="foreign"> 
              <param name="property">customer</param> 
          </generator> 
</id>

<one-to-one name="customer" 
            class="Customer" 
            constrained="true"
            outer-join="false"/> <!--通过一个外键引用对主键进行约束-->


Customer cus = new Customer();
cus.setName("logcd");
Address add = new Address();
add.setCity("成都");
add.setProvince("四川");
add.setCustomer(cus);
cus.setAddress(add);
customerDao.save(cus);

(2)把many-to-one设置unique="true",则这时候的many-to-one实质上就是one-to-one

create table ADDRESS(
ID bigint not null auto_increment,
STREET varchar(128),
CITY varchar(128),
PROVINCE varchar(128),
primary key (ID)
);

create table CUSTOMER(
ID bigint not null auto_increment,
NAME varchar(15),
ADDRESS_ID bigint,
foreign key (ADDRESS_ID) references ADDRESS(ID),  
primary key (ID)
);

Customer.hbm.xml

<id
	name="Id"
	type="java.lang.Long"
	column="ID"
	>
	<generator class="native"/>
</id>

<many-to-one
	name="Address"
	class="Address"
	cascade="all"
	unique="true"
	>
	<column name="ADDRESS_ID"/>
</many-to-one>


Address.hbm.xml

<id
	name="Id"
	type="java.lang.Long"
	column="ID"
	>
	<generator class="native"/>
</id>

<one-to-one
	class="Customer"
	name="customer"
	property-ref="Address"
/>


Customer cus = new Customer();
cus.setName("jinming");
Address add = new Address();//如果是查询出来,unique="true",没作用???
add.setCity("chengdu");
add.setProvince("sichuan");
add.setCustomer(cus);
cus.setAddress(add);
customerDao.save(cus);

说明:hibernate的unique是给生成DDL的时候使用,所以需要检查下数据库的schema,那里加了unique约束才是有效的
MySQL:alter table your_table add unique (column_name)

你可能感兴趣的:(java,Hibernate,xml,mysql)