易网时代-编程资源站
Welcome
微信登录
首页
/
操作系统
/
Linux
/
Hibernate之one-to-one主键关联映射
one-to-one映射的例子为一个人拥有一个身份证,一个身份证属于一个人。先创建po类Person.java
package
po;
public
class
Person {
private
int
id;
private
String name;
//姓名
public
int
getId() {
return
id;
}
public
void
setId(
int
id) {
this
.id = id;
}
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
}
Card.java
package
po;
public
class
Card {
private
int
id;
//身份证ID
private
String number;
//身份证号码
private
Person person;
//一个身份证号对应一个人
public
int
getId() {
return
id;
}
public
void
setId(
int
id) {
this
.id = id;
}
public
String getNumber() {
return
number;
}
public
void
setNumber(String number) {
this
.number = number;
}
public
Person getPerson() {
return
person;
}
public
void
setPerson(Person person) {
this
.person = person;
}
}
po类的映射文件 Person.hbm.xml
<hibernate-mapping>
<class
name
=
"po.Person"
table
=
"person"
>
<id
name
=
"id"
type
=
"integer"
>
<generator
class
=
"native"
/>
</id>
<property
name
=
"name"
/>
</class>
</hibernate-mapping>
Card.hbm.xml
<hibernate-mapping>
<class
name
=
"po.Card"
table
=
"card"
>
<id
name
=
"id"
type
=
"integer"
>
<!-- 主键生成方式为foreign -->
<generator
class
=
"foreign"
>
<param
name
=
"property"
>
person
</param>
</generator>
</id>
<property
name
=
"number"
></property>
<!-- !!!constrained=true表示生成外键约束 -->
<one-to-one
name
=
"person"
constrained
=
"true"
></one-to-one>
</class>
</hibernate-mapping>
hibernate.cfg.xml
<hibernate-configuration>
<session-factory>
<property
name
=
"dialect"
>
org.hibernate.dialect.MySQLDialect
</property>
<property
name
=
"connection.url"
>
jdbc:mysql://localhost:3306/hibernate
</property>
<property
name
=
"connection.username"
>
root
</property>
<property
name
=
"connection.password"
>
1
</property>
<property
name
=
"connection.driver_class"
>
com.mysql.jdbc.Driver
</property>
<property
name
=
"myeclipse.connection.profile"
>
mysql
</property>
<property
name
=
"show_sql"
>
true
</property>
<property
name
=
"format_sql"
>
true
</property>
<mapping
resource
=
"po/Person.hbm.xml"
/>
<mapping
resource
=
"po/Card.hbm.xml"
/>
</session-factory>
</hibernate-configuration
测试类Test.java
package
po;
import
java.util.Date;
import
java.util.HashSet;
import
java.util.Iterator;
import
java.util.Set;
import
org.hibernate.Session;
import
org.hibernate.SessionFactory;
import
org.hibernate.cfg.Configuration;
import
org.hibernate.tool.hbm2ddl.SchemaExport;
import
org.junit.Test;
public
class
Test {
@Test
public
void
testCreateDB(){
//生成表结构
Configuration config =
new
Configuration().configure();
SchemaExport export =
new
SchemaExport(config);
export.create(
true
,
true
);
}
@Test
public
void
testSave(){
//测试 添加数据
Configuration config =
new
Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
Session session = factory.openSession();
session.beginTransaction();
Person person =
new
Person();
//先有person然后才能有省份证
person.setName(
"zhangsan"
);
Card card =
new
Card();
card.setNumber(
"4114031111222223333"
);
card.setPerson(person);
//此身份证属于此人
session.save(card);
//保存card
session.getTransaction().commit();
}
@Test
public
void
testGetPerson(){
Configuration config =
new
Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
Session session = factory.openSession();
session.beginTransaction();
Card card = (Card)session.get(Card.
class
,
1
);
//取出Card
System.out.println(
"CardNumber: "
+card.getNumber());
Person person = card.getPerson();
//通过card.getPerson()方法 返回person
System.out.println(
"PersonName: "
+person.getName());
//取出person的name
session.getTransaction().commit();
session.close();
}
}
hibernate后天生成表结构sql为
create
table
card (
id
integer
not
null
,
number
varchar
(255),
primary
key
(id)
)
create
table
person (
id
integer
not
null
auto_increment,
name
varchar
(255),
primary
key
(id)
)
alter
table
card
add
index
FK2E7B10F83A3F5F (id),
add
constraint
FK2E7B10F83A3F5F
foreign
key
(id)
references
person (id)
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图