单向和双向关联有什么区别?
由于在db中生成的表都是相同的,因此我发现的唯一区别是双向关联的每一侧都将引用另一侧,而单向不引用.
这是一个单向关联
public class User {
private int id;
private String name;
@ManyToOne
@JoinColumn(
name = "groupId")
private Group group;
}
public class Group {
private int id;
private String name;
}
Run Code Online (Sandbox Code Playgroud)
双向关联
public class User {
private int id;
private String name;
@ManyToOne
@JoinColumn(
name = "groupId")
private Group group;
}
public class Group {
private int id;
private String name;
@OneToMany(mappedBy="group")
private List<User> users;
}
Run Code Online (Sandbox Code Playgroud)
区别在于该组是否拥有用户的参考.
所以我想知道这是唯一的区别吗?哪个推荐?
我有两个实体之间的简单关联 - Category
和Email
(NtoM).我正在尝试创建用于浏览和管理它们的Web界面.我有一个简单的电子邮件订阅编辑表单,其中包含表示给定电子邮件所属类别的复选框列表(我注册了Set<Category>
类型的属性编辑器).
表格显示效果很好,包括标记当前指定的类别(对于现有的电子邮件).但是没有更改保存到EmailsCategories表(NtoM映射表,定义的表@JoinTable
- 既没有添加新检查的类别,也没有删除未选中的类别.
邮件实体:
@Entity
@Table(name = "Emails")
public class Email
{
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
@Column(length = User.UUID_LENGTH)
protected UUID id;
@NaturalId
@Column(nullable = false)
@NotEmpty
@org.hibernate.validator.constraints.Email
protected String name;
@Column(nullable = false)
@Temporal(TemporalType.TIMESTAMP)
protected Date createdAt;
@Column
protected String realName;
@Column(nullable = false)
protected boolean isActive = true;
@ManyToMany(mappedBy = "emails", fetch = FetchType.EAGER)
protected Set<Category> categories = new HashSet<Category>(); …
Run Code Online (Sandbox Code Playgroud)