现在的位置: 首页 > 综合 > 正文

hibernate-实体类映射

2017年12月27日 ⁄ 综合 ⁄ 共 2215字 ⁄ 字号 评论关闭
	1--1: 		
	N--1:ActivityFeedback--&Activity(n个反馈对应一个活动)
		无连接表:@ManyToOne(直接通过外键策略处理关联映射)
					-cascade:是否会自动先保存外键对象,再保存实体对象
					-fetch:join
					-lazy
					-unique	
		有连接表:@JoinTable				
	1--N:1的一端需要访问N的一端,而N的一端则需要以集合的形式出现(Set)
		@OneToMany
	N--N:
		@ManyToMany
	(双向7*2连接表=14种)

---关联映射的Annotation注解

(建议不要在属性上引入注解,因为属性是private的,如果引入注解会破坏其封装特性,所以建议在getter方法上加入注解)

@Entity//注解实体类
@Table(name="t_user")//注解表名
@Id//注解主键ID
@Column(name="person_name")注解字段名,还提供其他多个属性进行设置:name,length,nullable,insertable,updateable,unique等
@JoinColumn(name="pid")指定外键的名字为pid,如果没有指定外键名默认为:(字段名)_id,同时也提供其他多个属性:name,nullable,insertable,updateable,unique等

---@JoinTable
@JoinTable(name = "t_mtm2_teacher_course", //@JoinTable指定中间表表名
joinColumns = { @JoinColumn(name = "cid") }, //joinColumns指定该表在中间表中的外键名称,没有指定则用默认值
inverseJoinColumns = { @JoinColumn(name = "tid") })//inverseJoinColumns指定另一方在中间表中的外键名称

---单向双向的区别:根据是否有一方使用mappedBy来判断

单向:如A表外键到B表,不过B表不做其他操作,A表可以取到B表,而B表取不到A表
双向:如A表外键到B表,同时B表通过(mappedBy)代码控制,令A表可以去到B表,且B表也可以取到A表
单向:没有使用mappedBy
双向:使用mappedBy

---有无中间表:如果没有指定由谁来维护关联关系,则会创建一张中间表,由mappedBy,@JoinColumn,@JoinTable共同影响

---mappedBy属性

链接:http://xiaoruanjian.iteye.com/blog/1094253

假设@OneToOne(mappedBy="person"),Pserson与IDCard一对一
    mappedBy指定由包含person属性的一方来维护关联关系(建立外键),
使用mappedBy属性后,则该表中不会建立外键
    若没有使用mappedBy属性,则该表也会建立外键     
    使用mappedBy属性后,虽然生成的该表中没有包含外键字段,但通过代码控制,也可以访问到外键表的内容,也可调用外键的get,set方法
    使用mappedBy属性后,就属于双向关联:
   

@OneToOne,@OneToMany,@ManyToOne,@ManyToMany:
超强链接:http://www.ibm.com/developerworks/cn/java/j-lo-jparelated/

-报错:java.lang.NoSuchMethodError: javax.persistence.OneToOne.orphanRemoval()Z,javax.persistence.OneToMany.orphanRemoval()Z
链接:http://blog.csdn.net/yanxiahua/article/details/8691614

---@MappedSupperclass

链接:http://cwalet.iteye.com/blog/1026626
由@MappedSuperclass注解的类不是一个真正的实体类,他不会映射到数据库表,
但是他的属性都将映射到其子类的数据库字段中。(供子类继承,共享属性)

标注为@MappedSuperclass的类不能再标注@Entity或@Table注解,也无需实现序列化接口。

如果一个标注为@MappedSuperclass的类继承了另外一个实体类或者另外一个同样标注了@MappedSuperclass的类的话,
他将可以使用@AttributeOverride或@AttributeOverrides注解重定义其父类(无论是否是实体类)的属性映射到数据库表中的字段。
如:
@MappedSuperclass
public class MyAuditableModel{
//....
}

---hibernate继承映射与多态查询:
链接:http://blog.csdn.net/jialinqiang/article/details/8711508
链接:http://www.ibm.com/developerworks/cn/java/j-hibernate/
链接:http://www.blogjava.net/freeman1984/archive/2009/11/02/300702.html

参加"testEntity"

抱歉!评论已关闭.