1、在Hibernate中,One2One的基于注解Annotation的实现
2、Student.java的代码(带注解,注意注解是在哪个包下的)
import javax.persistence.Entity;
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue
private int id;
@Column(name = "age")
private int age;
private String name;
// one2one,持有IdCard
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "idcard")
private IdCard idCard;
public Student() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public IdCard getIdCard() {
return idCard;
}
public void setIdCard(IdCard idCard) {
this.idCard = idCard;
}
@Override
public String toString() {
return "Student [id=" + id + ", age=" + age + ", name=" + name + "]";
}
}
3、IdCard.java的代码(带注解,注意注解是在哪个包下的)
import javax.persistence.Table;
@Entity
@Table(name = "idcard")
public class IdCard {
@Id
@GeneratedValue
private int id;
@Column(name = "idcardnumber")
private String idcardnumber;
public IdCard() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getIdcardnumber() {
return idcardnumber;
}
public void setIdcardnumber(String idcardnumber) {
this.idcardnumber = idcardnumber;
}
@Override
public String toString() {
return "IdCard [id=" + id + ", idcardnumber=" + idcardnumber + "]";
}
}
4、hibernate.cfg.xml的配置
4.1 将Student.java和ClassRoom.java,加入到hibernate.cfg.xml的配置文件里面
<!--3.加载实体的映射文件 -->
<mapping class="com.hibernate.entity.IdCard" />
<mapping class="com.hibernate.entity.Student" />
4.2 hibernate.cfg.xml的配置的完整内容
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<!-- 通常,一个session-factory节点代表一个数据库 -->
<session-factory>
<!-- 1. 数据库连接配置 -->
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql:///hibernate
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1234</property>
<!-- 数据库方法配置, hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql -->
<property name="hibernate.dialect">
org.hibernate.dialect.MySQL5Dialect
</property>
<!-- 2. 其他相关配置 -->
<!-- 2.1 显示hibernate在运行时候执行的sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 2.2 格式化sql -->
<property name="hibernate.format_sql">true</property>
<!-- 2.3 自动建表 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--3.加载实体的映射文件 -->
<mapping class="com.hibernate.entity.IdCard" />
<mapping class="com.hibernate.entity.Student" />
</session-factory>
</hibernate-configuration>
5、测试代码
public class HibernateTest {
@Test
public void testone2many() {
Student stu1 = new Student();
stu1.setAge(18);
stu1.setName("18");
Student stu2 = new Student();
stu2.setAge(19);
stu2.setName("19");
IdCard idCard = new IdCard();
idCard.setIdcardnumber("1234567");
// 保存到数据库
IClassRoomDao roomDao = new ClassRoomDaoImpl();
IStudentDao studentDao = new StudentDaoImpl();
// 注册关系
stu1.setIdCard(idCard);
stu2.setIdCard(idCard);
// 在保存一的一方
roomDao.add(idCard);
// 先保存多的一方
studentDao.add(stu1);
studentDao.add(stu2);
}
}
6、代码下载