Use Case :后台用户(User),杂志(Magazine)。
一个后台用户可以创建很多杂志(@OneToMany)。
一本杂志被一个后台用户创建(@ManyToOne)。
其实个人感觉还是Rails里的belongs_to 比ManyToOne 更加符合语义。
首先建立杂志类:
/** * 杂志类 */ @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。