Play!框架下JPA @OneToMany @ManyToOne注解实例

Use Case :后台用户(User),杂志(Magazine)。

 

一个后台用户可以创建很多杂志(@OneToMany)。

一本杂志被一个后台用户创建(@ManyToOne)。

 

其实个人感觉还是Rails里的belongs_toManyToOne 更加符合语义。

 

首先建立杂志类:

/**
 * 杂志类
 */
@Entity
public class Magazine extends Model
{
	// 主题
	@Required
	public String topic;

	// 刊号
	@Required
	public int serial;

	// 简介
	@Required
	public String summary;

	// 发布日期
	@Required
	public String date;

	// 被一个后台用户创建
	@ManyToOne
	public User creator;

}
 

其次是后台用户类:

@Entity
public class User extends Model
{
	// 用户名
	public String username;

	// 密码
	public String password;

	// 是否是管理员
	public int isAdmin;

	// 主数据库的id
	public long common_user_id;

	
	// 添加过很多杂志
	@OneToMany(mappedBy = "creator")
	public List<Magazine> magazines;
}

 

可以看到,

	@OneToMany(mappedBy = "creator")
	public List<Magazine> magazines;

 

说明

1. 两个类之间是通过creator来关联,所以数据库不会生成一个中间表。

 

2. 因为Magazine类对于@ManyToOne没有额外修饰, 所以数据库中magazine表会根据约定自动产生一个creator_id(也就是属性"creator"+_id)并生成外键指向user表的id,通过magazine表的creator_id和user表的id的join来获取相关的数据。

 

 

如果改成这样

@ManyToOne
@JoinColumn(name = "main_creator_id", referencedColumnName = "common_user_id")
public User creator;

 

那么则magazine表会产生一个main_creator_id(而不是creator_id),并生成外键指向user表的common_user_id。

 

 

来自:http://thierry-xing.iteye.com/blog/1443317

你可能感兴趣的:(play)