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。