[Hibernate] - Annotations - One To One
Hibernate annotation 一对一的两种实现:
1)幅表中有主表的主键ID做为引用
2)幅表的主键即为主表的ID
hibernate.cfg.xml
<?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> <!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1/testdb</property>
<property name="connection.username">root</property>
<property name="connection.password"></property> <!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property> <!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property> <!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> <!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property> <mapping class="com.my.bean.User"/>
<mapping class="com.my.bean.UserCard"/>
<mapping class="com.my.bean.UserInfo"/> </session-factory> </hibernate-configuration>
HibernateUtil.java
package com.my.dao.util; import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration; public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
Configuration configuration = new Configuration();
return configuration.configure().buildSessionFactory(
new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build());
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
} public static SessionFactory getSessionFactory() {
return sessionFactory;
} }
Java Beans:
package com.my.bean; import java.util.Date; import javax.persistence.*; @Entity
@Table(name="user")
public class User {
@Id @GeneratedValue @Column(name="user_id", nullable=false)
private long userID; @Column(name="user_name", length=100, nullable=false)
private String userName; @Column(name="create_time", nullable=false)
private Date createTime; @OneToOne(mappedBy="user")
private UserCard userCard; @OneToOne(cascade=CascadeType.ALL)
@PrimaryKeyJoinColumn
private UserInfo userInfo; public long getUserID() {
return userID;
} public void setUserID(long userID) {
this.userID = userID;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public Date getCreateTime() {
return createTime;
} public void setCreateTime(Date createTime) {
this.createTime = createTime;
} public UserCard getUserCard() {
return userCard;
} public void setUserCard(UserCard userCard) {
this.userCard = userCard;
}
}
package com.my.bean; import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table; @Entity
@Table(name="user_card")
public class UserCard {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="card_id", nullable=false)
private long cardID; @OneToOne
@JoinColumn(name="user_id")
private User user; @Column(name="card_name", nullable=false)
private String cardName; public long getCardID() {
return cardID;
}
public void setCardID(long cardID) {
this.cardID = cardID;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getCardName() {
return cardName;
}
public void setCardName(String cardName) {
this.cardName = cardName;
}
}
package com.my.bean; import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter; @Entity
@Table(name="user_info")
public class UserInfo {
@Id
@GeneratedValue(generator="userInfoForeignKey")
@GenericGenerator(name="userInfoForeignKey", strategy="foreign", parameters=@Parameter(name="property", value="user"))
@Column(name="user_id", nullable=false)
private long userID; @Column(name="message", nullable=false)
private String Message; @OneToOne(mappedBy="userInfo")
private User user; public long getUserID() {
return userID;
} public void setUserID(long userID) {
this.userID = userID;
} public String getMessage() {
return Message;
} public void setMessage(String message) {
Message = message;
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
}
}
测试:
package com.my.init;
import java.util.Date; import org.hibernate.Session;
import org.hibernate.Transaction; import com.my.bean.User;
import com.my.bean.UserCard;
import com.my.bean.UserInfo;
import com.my.dao.util.HibernateUtil; public class Test { public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction(); try {
//---------------------------------------------------------
// The first method
//---------------------------------------------------------
// add user
User user = new User();
user.setUserName("Robin");
user.setCreateTime(new Date()); // add user card
UserCard userCard = new UserCard();
userCard.setCardName("BBC"); // add user card to user object
user.setUserCard(userCard);
userCard.setUser(user); //---------------------------------------------------------
// The second method
//---------------------------------------------------------
UserInfo userInfo = new UserInfo();
userInfo.setMessage("Message");
userInfo.setUser(user); //---------------------------------------------------------
// save
//---------------------------------------------------------
session.save(user);
session.save(userCard);
session.save(userInfo); tx.commit();
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
} session.close();
} }
[Hibernate] - Annotations - One To One的更多相关文章
- [Hibernate] - Annotations - Many To Many
Hibernate annotation 多对多: 下面测试例子会自动生成一张表:card,这张是bank和user表的映射表.里头是bank_id和user_id两个组合字段. 如果想在这张映射表中 ...
- JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-007UserTypes的用法(@org.hibernate.annotations.Type、@org.hibernate.annotations.TypeDefs、CompositeUserType、DynamicParameterizedType、、、)
一.结构 二.Hibernate支持的UserTypes接口 UserType —You can transform values by interacting with the plain JD ...
- JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-005控制类型映射(Nationalized、@LOB、@org.hibernate.annotations.Type)
一.简介 1. 2. 3. 4. to override this default mapping. The JPA specification has a convenient shortcut a ...
- java.lang.ClassNotFoundException: org.hibernate.annotations.common.reflection.MetadataProvider
Caused by: java.lang.NoClassDefFoundError: org/hibernate/annotations/common/reflection/MetadataProvi ...
- BAE 环境下 hibernate annotations 配置
annotations 配置 首先需要加入 hibernate-jpa-2.0-api-1.0.1.Final.jar 和 ejb3-persistence.jar 这两个包 ejb3-persis ...
- Caused by: java.lang.ClassNotFoundException: org.hibernate.annotations.common.reflection.MetadataPro
1.错误描述 信息: MLog clients using java 1.4+ standard logging. 2014-7-12 19:29:20 com.mchange.v2.c3p0.C3P ...
- Hibernate Annotations 注解
Hibernate Annotations 注解 对于org.hibernate.annotations与org.hibernate.persistence,它的注释比如Columns,可是不知道怎么 ...
- [Hibernate] - Annotations
Hibernate使用Annotations最简单例子: hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8 ...
- [Hibernate] - Annotations - One To Many
Hibernate使用Annotation的一对多: hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8&q ...
随机推荐
- 论文学习 - 《Hadoop平台下的海量数据存储技术研究》
摘要 研究背景: 1. 互联网的图片数据急剧膨胀 2. Hadoop平台下的Hdfs分布式文件系统能够很好的处理海量数据 研究内容: 1. Hadoop平台工作原理 2. Hadoop平台下图片存储系 ...
- sdut 2159 Ivan comes again!(2010年山东省第一届ACM大学生程序设计竞赛) 线段树+离散
先看看上一个题: 题目大意是: 矩阵中有N个被标记的元素,然后针对每一个被标记的元素e(x,y),你要在所有被标记的元素中找到一个元素E(X,Y),使得X>x并且Y>y,如果存在多个满足条 ...
- jqueryIFrame框架内元素操作
//获取框架内元素 $(document.getElementById('main').contentWindow.document.body).find("#txtRD_Num" ...
- jQuery关于Select的操作
jQuery获取Select选择的Text和Value: 1. var checkText=jQuery("#select_id").find("option:selec ...
- SAP 默认的连接端口
3708.3908.4008.32<instance number> 如instance number是00的话,就是3200,这是给 disp+working process 用的. 3 ...
- 2015GitWebRTC编译实录5
2015.07.20 libaudio_encoder_interface/libaudio_decoder_interface 编译通过将encoder,decoder两个lib合并了,后面需要看看 ...
- matlab演奏《卡农》
% Cripple Pachebel’s Canon on Matlab% Have fun fs = 44100; % sample ratedt = 1/fs; T16 = 0.125; t16 ...
- map遍历的四种方法
public static void main(String[] args) { Map<String, String> map = new HashMap<String, Stri ...
- 使用 rqt_console 和 roslaunch---8
使用 rqt_console 和 roslaunch Description: 本教程介绍如何使用rqt_console和rqt_logger_level进行调试,以及如何使用roslaunch同时运 ...
- layer 一款口碑极佳的web弹层组件,弹框专用
研究学习网址: http://layer.layui.com/