ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:34.80KB ,
资源ID:7939260      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7939260.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(hibernate annotation 双向 onetoone 注解.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

hibernate annotation 双向 onetoone 注解.docx

1、hibernate annotation 双向 onetoone 注解hibernate annotation 双向 one-to-one 注解 环境: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=InnoD

2、B 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 AU

3、TO_INCREMENT=2 DEFAULT CHARSET=gb2312;INSERT INTO t_person VALUES (1, fancy, 1);Person.javapackage com.fancy.po;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import java

4、x.persistence.JoinColumn;import javax.persistence.OneToOne;import javax.persistence.Table;/* * - * 文件: Person.java * 作者: fancy * 邮箱: fancyzero * 时间: 2012-6-10 * 描述: 实体类 * - */* * Entity 声明一个类为实体Bean * Table(name = xx)指定实体类映射的表,如果表名和实体类名一致,可以不指定 */EntityTable(name = t_person)public class Person priva

5、te Integer personId; private String personName; private Card card; /* * Id 映射主键属性,这里采用uuid的主键生成策略 * GeneratedValue 注解声明了主键的生成策略。该注解有如下属性 * strategy 指定生成的策略,默认是GenerationType. AUTO * GenerationType.AUTO 主键由程序控制 * GenerationType.TABLE 使用一个特定的数据库表格来保存主键 * GenerationType.IDENTITY 主键由数据库自动生成,主要是自动增长类型 *

6、GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列 * generator 指定生成主键使用的生成器 */ Id GeneratedValue(strategy = GenerationType.AUTO) public Integer getPersonId() return personId; /* * OneToOne:一对一关联 * cascade:级联,它可以有有五个值可选,分别是: * CascadeType.PERSIST:级联新建 * CascadeType.REMOVE : 级联删除 * CascadeType.REFRESH

7、:级联刷新 * 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.per

8、sonId = personId; public void setPersonName(String personName) this.personName = personName; public void setCard(Card card) this.card = card; Card.javapackage com.fancy.po;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.per

9、sistence.Id;import javax.persistence.OneToOne;import javax.persistence.Table;/* * - * 文件: Card.java * 作者: fancy * 邮箱: fancyzero * 时间: 2012-6-10 * 描述: 实体类 * - */EntityTable(name = t_card)public class Card private Integer cardId; private String cardNumber; private Person person; Id GeneratedValue(stra

10、tegy = 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 *

11、/ 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.perso

12、n = person; pom.xml 4.0.0 com.fancy hibernate-annotation-on-to-one-example 0.0.1-SNAPSHOT jar hibernate-annotation-on-to-one-example http:/maven.apache.org UTF-8 org.hibernate hibernate-entitymanager 3.3.1.ga org.hibernate hibernate-annotations 3.3.1.GA mysql mysql-connector-java 5.1.17 junit junit

13、3.8.1 test 在生成数据库表的过程中,报javax.persistence.OneToMany.orphanRemoval()Z异常的解决方法:去掉myeclipse中的j2ee包居然就可以了!oneToMany(mappedBy=另一方类中对应的属性名(外键),cascade=CascadeType.ALL,fetch=FetchType.EAGER)就相当于xml配置中的inverse=true在单向关系中没有mappedBy。mappedBy一定是定义在the owned side(被拥有方的),他指向the owning side(拥有方);主控方相当于拥有指向另一方的外键的一

14、方。mappedBy指定的是不需要维护关系的一端ManyToOneJoinColumn(name=外键的字段名)1.一对一和多对一的JoinColumn注解的都是在“主控方”,都是本表指向外表的外键名称。2.一对多的JoinColumn注解在“被控方”,即一的一方,指的是外表中指向本表的外键名称。3.多对多中,joinColumns写的都是本表在中间表的外键名称, inverseJoinColumns写的是另一个表在中间表的外键名称。mappedBy跟JoinColumn/JoinTable总是处于互斥的一方如产品类型和产品的关系:EntityTable(name=tb_productType

15、)/经常给漏掉这东西public class ProductType extends BaseBean private static final long serialVersionUID = 3466104768256418884L;Column(nullable=false,unique=true)private String name;OneToMany(mappedBy=type,cascade=CascadeType.ALL,fetch=FetchType.EAGER)private List products;.和:EntityTable(name=tb_product)publi

16、c class Product extends BaseBean private static final long serialVersionUID = 4109238647414563541L;Column(nullable=false)private String name;Column(precision=2)private double price;Basic(fetch = FetchType.LAZY)Column(columnDefinition = longtext)private String intro;private String masterDrowing;ManyT

17、oOneJoinColumn(name=productType_id)private ProductType type;private String comment;private int hit;private boolean finalRealse;private int count;ManyToOneJoinColumn(name=person_id)private Person contacter;Temporal(value = TemporalType.DATE)private Date realseDate;.hibernate的配置文件:com.mysql.jdbc.Drive

18、rjdbc:mysql:/localhost:3306/site?characterEncoding=UTF-8rootrootorg.hibernate.dialect.MySQLDialecttruecreatethread产生数据库表的类:createTable类import org.hibernate.cfg.AnnotationConfiguration;import org.hibernate.tool.hbm2ddl.SchemaExport;public class CreateTable static void create()SchemaExport export = ne

19、w SchemaExport(new AnnotationConfiguration().configure(); export.create(true, true);public static void main(String args)create();经过这些配置就可以生成数据库表了!单向关系中的JoinColumn 1.person与address的一对一单向关系:在address中没有特殊的注解。在Person中对应到数据库里面就有一个指向Address的外键.我们也可以增加注释指定外键的列的名字,如下: OneToOne(cascade=CascadeType.ALL,option

20、al=true) JoinColumn(name=addressID)/注释本表中指向另一个表的外键。 public Address getAddress() return address; 如果我们不加的话,也是可以通过的,在JBOSS里面,它会自动帮你生成你指向这个类的类名加上下划线再加上id的列,也就是默认列名是:address_id. 如果是主键相关联的话,那么可以运用如下注释 OneToOne(cascade=CascadeType.ALL) PrimaryKeyJoinColumn public Address getAddress( ) return homeAddress; 它

21、表示两张表的关联是根据两张表的主键的2.person和phone的一对多单向关系:phone中没有特别的注释。person中:OneToMany(cascade=CascadeType.ALL)JoinColumn(name=personID)/注释的是另一个表指向本表的外键。public List getPhones() return phones; 我们可以在Person类里面发现JoinColumn(name=personID) 它代表是一对多,一是指类本身,多是指这个成员,也就是一个类可以对应多个成员. 在一对多里面,无论是单向还是双向,映射关系的维护端都是在多的那一方,也就是Phon

22、e那里,因为要在数据库面表现的话,也只有让Phone起一个指向Person的外键,不可能在Person里面指向Phone,这一点和一对一不一样,一对一可以在任意一方起一个外键指向对方.可是一对多却不行了.在这里JoinColumn这个注释指的却是在Phone里面的外键的列的名字,它并不像在一对一里面的注释指的是自己表里面的外键列名.这一点要特别注意一下.如果是一对多的双向关系,那么这个注释就要应用到多的那边去了,虽然注释还在Person类里面,但是它起的效果却是在Phone里面起一个叫personID的外键, 因为多的那边要有外键指向少的这边. 如果你不加 JoinColumn(name=pe

23、rsonID)这个注释的话,那么JBOSS就会自动帮你生成一张中间表,它负现Person和Phone表之间的联系.它将会做如下事情:CREATE TABLE PERSON_PHONE( PERSON_id INT, PHONE_id INT);ALTER TABLE PERSON_PHONE ADD CONSTRAINT person_phone_unique UNIQUE (PHONE_id);ALTER TABLE PERSON_PHONE ADD CONSTRAINT personREFphone FOREIGN KEY (PERSON_id) REFERENCES PERSON (id);ALTER TABLE PERSON_PHONE ADD CONSTRAINT personREFphone2 FOREIGN KEY (PHONE_id) REFERENCES PHONE (id);所以我们最好还是指定一下,以让程序产生更加确定的行为,不过一般是推荐另外生成一个中间表好一些,因为这样的话,对原来两张表的结构不对造成任何影响。在遗留系统的时候很多用,有些时候,一些表都是以前就建好了的,要改表的结构是不太可能的,所以这个时候中间的表就显得很重要了,它可以在不侵入原来表的情况下构建出一种更清淅更易管理的关系。所以一对多的单向关联,我们还是推荐使用一张中间表来建立关系。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1