读书人

Play!框架上JPA @OneToMany @ManyToOn

发布时间: 2012-08-25 10:06:20 作者: rapoo

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

读书人网 >编程

热点推荐