(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:
Address.hbm.xml:
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
Address.hbm.xml
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)
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"/>
<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"/> <!--通过一个外键引用对主键进行约束-->
<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>
<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"
- />
<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)