JPA实体注解

JPA实体注解用例项目地址
https://github.com/lx-sunday/springboot-jpa.git

参考博客:
http://blog.sina.com.cn/s/blog_49fd52cf0100scql.html

ManyToOne

关系的拥有方(即Many的一方)负责关系的维护,在拥有方建立外键会用到JoinColumn。列举使用ManyToOne进行实体注解,如创建一个分类树形结构的实体。

/**
 * 当前实体中ManyToOne与OneToMany对应的实体都是本身
 * @author lx
 *
 */
@Entity
@Table(name="category")
public class Category implements Serializable{
	private static final long serialVersionUID = 3056901912384376245L;
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	
	@Column(name="name")
	private String name;
	/**
	 * 关系的拥有方(即Many的一方)负责关系的维护,在拥有方建立外键,会用到JoinColumn
	 */
	@ManyToOne
	@JoinColumn(name="pid")
	private Category parent;
	
	/**
	 * 用于双向关联,由one的一方指向many的一方,同时这个属性为one的一方在many一方的属性值
	 */
	@OneToMany(mappedBy="parent",fetch=FetchType.EAGER)
	private List<Category> childList;
}

OneToMany

1:mappedBy属性用于双向关联,由one的一方指向many的一方,同时这个属性为one的一方在many一方的属性值,如上面的父级分类对应多个子级分类。

2:与@JoinTable结合一起实现表关联
@Target({METHOD, FIELD})
public @interface JoinTable{
String name() default “”;
String catalog() default “”;
String schema() default “”;
JoinColumn[] joinColumns() default {};
JoinColumn[] inverseJoinColumns() default {};
UniqueConstraint[] uniqueConstraints default {};
}
name属性:为连接两个表的表名称。若不指定,则使用默认的表名称,格式如下:“表名1” + “_” + “表名2”。
joinColumns属性:在保存关系的表中,所保存关联关系的外键的字段,并配合@JoinColumn标记使用。
inverseJoinColumns属性:与joinColumns类似,它保存的是保存关系的另外一个外键字段。
catalog和schema属性:表示实体指定点目录名称或数据库名称。
uniqueConstraints属性:表示该实体所关联的唯一约束条件,一个实体可以有多个唯一约束条件,默认没有约束。
注意:@JoinTable不仅能够定义一对多的关联,也可以定义多对多表的关联。

列举通过@JoinTable创建关联表,如一个分组中存在多个用户,用第三张表group_user来保存分组用户关系:

@Entity
@Table(name="groups")
public class Groups implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -6655151439368207897L;
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Long id;
	
	private String name;
	
	/**
	 * 表关联,通过JoinTable创建关联表
	 */
	@OneToMany(fetch=FetchType.EAGER)
	@JoinTable(name="group_user",
	           joinColumns={@JoinColumn(name="group_id",referencedColumnName="id")},
	   inverseJoinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}
	)
	private List<Users> userList;
}

Cascade

一般这个对象归你控制你就可以级联,不归你控制你就不要设置级联。OneToMany与OneToOne可以使用级联,ManyToMany与ManyToOne一般不使用级联。

说明:在定义关系时经常会涉及是否定义Cascade(级联处理)属性,担心造成负面影响.
    ·不定义,则对关系表不会产生任何影响
    ·CascadeType.PERSIST (级联新建)
    ·CascadeType.REMOVE (级联删除)
    ·CascadeType.REFRESH (级联刷新)
    ·CascadeType.MERGE (级联更新)中选择一个或多个。
    ·还有一个选择是使用CascadeType.ALL ,表示选择全部四项
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值