Play!框架下JPA @OneToMany @ManyToOne注解实例
Use Case :后台用户(User),杂志(Magazine)。
?
一个后台用户可以创建很多杂志(@OneToMany)。
一本杂志被一个后台用户创建(@ManyToOne)。
?
其实个人感觉还是Rails里的belongs_to比ManyToOne更加符合语义。
?
首先建立杂志类:
/** * 杂志类 */@Entitypublic class Magazine extends Model{// 主题@Requiredpublic String topic;// 刊号@Requiredpublic int serial;// 简介@Requiredpublic String summary;// 发布日期@Requiredpublic String date;// 被一个后台用户创建@ManyToOnepublic User creator;}?其次是后台用户类:
@Entitypublic class User extends Model{// 用户名public String username;// 密码public String password;// 是否是管理员public int isAdmin;// 主数据库的idpublic 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