title: Hibernate一对一注解开发

date: 2018-2-10 12:45:56

categories: Hibernate

tags: Hibernate


xl_echo编辑整理

Hibernate一对一注解开发

测试一对一注解开发java代码

package com.echo.hibernate.Test;

import org.hibernate.Session;
import org.junit.Test;

import com.echo.hibernate.onetoone.IdCard;
import com.echo.hibernate.onetoone.User;
import com.echo.hibernate.utils.HibernateUtils;

public class HibernateTest2 {

@Test
/**
* 测试OneToOne,由于Cascaed配置在IdCard中,所以我们需要来保存IdCard来测试
* 保存证件号,就保存用户
*/
public void save(){
Session session = HibernateUtils.getSession();
session.beginTransaction();

//创建IdCard
IdCard ic = new IdCard();
ic.setCardNum("1234567890");

//创建User
User user = new User();
user.setName("echo");

ic.setUser(user);

session.save(ic);

session.beginTransaction().commit();
session.close();
}

}

实体类注解配置代码

package com.echo.hibernate.onetoone;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="t_idcard",catalog="myxlsorry")
public class IdCard {
@Id
@GenericGenerator(name="myuuid",strategy="uuid")
@GeneratedValue(generator="myuuid")
private String id;
private String cardNum;

@OneToOne(targetEntity=User.class)
@JoinColumn(name="t_user")
@Cascade(CascadeType.SAVE_UPDATE)
private User user;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCardNum() {
return cardNum;
}
public void setCardNum(String cardNum) {
this.cardNum = cardNum;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}

}


package com.echo.hibernate.onetoone;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="t_user",catalog="myxlsorry")
public class User {

@Id
@GenericGenerator(name="myuuid",strategy="uuid")
@GeneratedValue(generator="myuuid")
private String id;
private String name;

@OneToOne(targetEntity=IdCard.class,mappedBy="user")
@JoinColumn(name="t_idcard")
private IdCard idCard;

public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
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;
}

}

核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!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>
<!-- 配置数据库连接的四个项 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///myxlsorry</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">20263800mq</property>
<!-- 告知hibernate我们使用的是哪种数据库 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- 设置数据库提交方式,默认false,设置为true就不用开启事务也能插入数据。注意:开启之后没法回滚数据? -->
<property name="hibernate.connection.autocommit">false</property>
<!-- 自动创建表 -->
<property name="hibernate.hbm2ddl.auto">update</property>


<!-- 可以将操作数据库发送的sql显示出来 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化生sql 作用:让sql可读性更高,但是会提高控制台的输出信息量 -->
<property name="hibernate.format_sql">true</property>



<!-- 设置连接提供者,告知hibernate我们需要使用那个连接池 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!-- c3p0连接池配置 -->
<property name="hibernate.c3p0.max_size">20</property><!-- 最大连接数 -->
<property name="hibernate.c3p0.min_size">5</property><!-- 最小连接数 -->
<property name="hibernate.c3p0.timeout">120</property><!-- 超时 -->
<property name="hibernate.c3p0.idle_test_period">3000</property><!-- 空闲链接时间 -->



<!-- 配置hibernate的映射文件所在位置 -->
<!-- <mapping resource="com/echo/hibernate/hibernatedomain/Person.hbm.xml"/> -->

<!-- 使用注解开发mapping后面直接跟class即可,class后面跟全类名 -->
<mapping class="com.echo.hibernate.domain.Book" />
<mapping class="com.echo.hibernate.domain.Person" />

<mapping class="com.echo.hibernate.domain.Customer" />
<mapping class="com.echo.hibernate.domain.Orders" />

<mapping class="com.echo.hibernate.manyonmany.Student" />
<mapping class="com.echo.hibernate.manyonmany.Teacher" />

<mapping class="com.echo.hibernate.onetoone.IdCard" />
<mapping class="com.echo.hibernate.onetoone.User" />

</session-factory>

</hibernate-configuration>