hibernate annotation 双向 one-to-one 注解
来源:互联网 发布:为数据而生 周涛 pdf 编辑:程序博客网 时间:2024/04/30 13:22
环境:
Hibernate 3.3.1 Maven 3.0.4 MySQL 5.5.13 Myeclipse 8.6.1
建表语句:
DROP TABLE IF EXISTS `t_card`;CREATE TABLE `t_card` ( `cardId` int(10) unsigned NOT NULL AUTO_INCREMENT, `cardNumber` char(18) NOT NULL, PRIMARY KEY (`cardId`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gb2312;INSERT INTO `t_card` VALUES ('1', '440911199008011122');
DROP TABLE IF EXISTS `t_person`;CREATE TABLE `t_person` ( `personId` int(10) unsigned NOT NULL AUTO_INCREMENT, `personName` varchar(15) NOT NULL, `cid` int(10) unsigned NOT NULL, PRIMARY KEY (`personId`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gb2312;INSERT INTO `t_person` VALUES ('1', 'fancy', '1');
Person.java
package com.fancy.po;import javax.persistence.CascadeType;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;/** * ----------------------------------------- * @文件: Person.java * @作者: fancy * @邮箱: fancyzero@yeah.net * @时间: 2012-6-10 * @描述: 实体类 * ----------------------------------------- *//** * @Entity 声明一个类为实体Bean * @Table(name = "xx")指定实体类映射的表,如果表名和实体类名一致,可以不指定 */@Entity@Table(name = "t_person")public class Person { private Integer personId; private String personName; private Card card; /** * @Id 映射主键属性,这里采用uuid的主键生成策略 * @GeneratedValue —— 注解声明了主键的生成策略。该注解有如下属性 * strategy 指定生成的策略,默认是GenerationType. AUTO * GenerationType.AUTO 主键由程序控制 * GenerationType.TABLE 使用一个特定的数据库表格来保存主键 * GenerationType.IDENTITY 主键由数据库自动生成,主要是自动增长类型 * GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列 * generator 指定生成主键使用的生成器 */ @Id @GeneratedValue(strategy = GenerationType.AUTO) public Integer getPersonId() { return personId; } /** * @OneToOne:一对一关联 * cascade:级联,它可以有有五个值可选,分别是: * CascadeType.PERSIST:级联新建 * CascadeType.REMOVE : 级联删除 * CascadeType.REFRESH:级联刷新 * CascadeType.MERGE : 级联更新 * CascadeType.ALL : 以上全部四项 * @JoinColumn:主表外键字段 * cid:Person所映射的表中的一个字段 */ @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "cid") public Card getCard() { return card; } public String getPersonName() { return personName; } public void setPersonId(Integer personId) { this.personId = personId; } public void setPersonName(String personName) { this.personName = personName; } public void setCard(Card card) { this.card = card; }}
Card.java
package com.fancy.po;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.OneToOne;import javax.persistence.Table;/** * ----------------------------------------- * @文件: Card.java * @作者: fancy * @邮箱: fancyzero@yeah.net * @时间: 2012-6-10 * @描述: 实体类 * ----------------------------------------- */@Entity@Table(name = "t_card")public class Card { private Integer cardId; private String cardNumber; private Person person; @Id @GeneratedValue(strategy = GenerationType.AUTO) public Integer getCardId() { return cardId; } /** * @OneToOne:一对一关联 * mappedBy = "card":意思是说这里的一对一配置参考了card * card又是什么呢?card是Person类中的getCard(),注意不是Person类中的 * card属性,Person类中的OneToOne配置就是在getCard()方法上面配的. * 如果Person类中的getCard()方法改成getIdCard(),其他不变的话, * 这里就要写成:mappedBy = "idCard" */ @OneToOne(mappedBy = "card") public Person getPerson() { return person; } public String getCardNumber() { return cardNumber; } public void setCardId(Integer cardId) { this.cardId = cardId; } public void setCardNumber(String cardNumber) { this.cardNumber = cardNumber; } public void setPerson(Person person) { this.person = person; }}
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.fancy</groupId> <artifactId>hibernate-annotation-on-to-one-example</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>hibernate-annotation-on-to-one-example</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- hibernate jar --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.3.1.ga</version> </dependency> <!-- hibernate annotation jar --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-annotations</artifactId> <version>3.3.1.GA</version> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.17</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
Test.java
package com.fancy.test;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.AnnotationConfiguration;import org.hibernate.cfg.Configuration;import com.fancy.po.Card;import com.fancy.po.Person;/** * ----------------------------------------- * @文件: Test.java * @作者: fancy * @邮箱: fancyzero@yeah.net * @时间: 2012-6-10 * @描述: 测试类 * ----------------------------------------- */public class Test { public static void main(String[] args) { //读取hibernate配置,默认读取classpath下的hibernate.cfg.xml Configuration conf = new AnnotationConfiguration(); //构建session工厂 SessionFactory sessionFactory = conf.configure().buildSessionFactory(); //打开session Session session = sessionFactory.openSession(); //开始事务 session.beginTransaction(); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * //test1(session); //测试 1 //test2(session); //测试 2 test3(session); //测试 3 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * //提交事务 session.getTransaction().commit(); //关闭session工厂 sessionFactory.close(); //关闭session session.close(); } /** * 数据库初始值: * personName:fancy * cardNumber:440911199008011122 */ //测试方法1 public static void test1(Session session){ Person person = (Person)session.get(Person.class, 1); //发出Person和Card的select语句 Card card = person.getCard(); System.out.println(person.getPersonName()); System.out.println(card.getCardNumber()); person.setPersonName("fancy"); //与初始值一致 card.setCardNumber("440911199008011122");//与初始值一致 session.save(person); //不发出sql语句 //session.save(card); //不发出sql语句 } //测试方法2 public static void test2(Session session){ Person person = (Person)session.get(Person.class, 1); //发出Person和Card的select语句 Card card = person.getCard(); System.out.println(person.getPersonName()); System.out.println(card.getCardNumber()); person.setPersonName("fancyzero"); //与初始值不一致 card.setCardNumber("440911199008011122");//与初始值一致 session.save(person); //发出Person的update语句,数据库中personName被修改,不发出Card的update语句 //session.save(card); //发出Person的update语句,数据库中personName被修改,不发出Card的update语句 } //测试方法3 public static void test3(Session session){ Person person = (Person)session.get(Person.class, 1); //发出Person和Card的select语句 Card card = person.getCard(); System.out.println(person.getPersonName()); System.out.println(card.getCardNumber()); person.setPersonName("fancy"); //与初始值不一致 card.setCardNumber("440911199008080808");//与初始值不一致 session.save(person); //同时发出Person和Card的update语句,数据库中的数据相应被修改 //session.save(card); //同时发出Person和Card的update语句,数据库中的数据相应被修改 }}
0 0
- hibernate annotation 双向 one-to-one 注解
- hibernate annotation 双向 one-to-one 注解
- hibernate annotation 双向 one-to-one 注解
- hibernate annotation 双向 one-to-one 注解
- Hibernate之one-to-one双向外键关联Annotation
- hibernate one-to-many many-to-one 双向注解
- hibernate one-to-many many-to-one 双向注解
- hibernate one-to-many many-to-one 双向注解
- hibernate one-to-many many-to-one 双向注解
- hibernate annotation one-to-one
- hibernate annotation one to one 共享主键
- Hibernate – One-To-One Example (Annotation)
- Hibernate – One-to-One example (Annotation)
- Hibernate – One-to-One example (Annotation)
- Hibernate – One-to-One example (Annotation)
- Hibernate – One-to-One example (Annotation)
- hibernate annotation one-to-many
- Hibernate one-to-many many-to-one 双向关联
- FutureTask的优点
- 关于主成分分析与因子分析的几点
- p12文件转pem文件
- Android改变状态栏statusbar背景色
- nginx做简单的负载均衡例子
- hibernate annotation 双向 one-to-one 注解
- PHP输出中文乱码的问题
- Power键 和 HOME键 广播监听的问题
- webapp如何从tomcat的conf目录中加载配置?
- DWR入门教程
- CDN(内容分发网络)技术原理
- 解决mac下安卓模拟器不能X86开启(加速模拟器)
- ShellExecuteEx打开、关闭exe
- JavaScript的垃圾回收机制