【发布时间】:2016-06-14 08:34:55
【问题描述】:
我应该如何尽可能简单地管理实体的创建、编辑和删除操作?
例如:
用户:
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
...
// Item can't exist without user
@OneToMany(cascade=CascadeType.ALL,mappedBy = "user",orphanRemoval=true)
private Set<Item> items = new HashSet<Item>();
public Set<Item> getItems() { return items; }
public void addItem(Item item) {
items.add(item);
}
public void removeItem(Item item) {
if(!items.contains(item)) return;
items.remove(item);
}
// Group can exist without a user
@ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH},mappedBy="users")
private Set<Group> groups = new HashSet<Group>();
public Set<Group> getGroups() { return groups; }
public void setGroups(Set<Group> groups) { this.groups = groups; }
public void addGroup(Group group) {
groups.add(group);
}
publi void removeGroup(Group group) {
if(!groups.contains(group)) return;
groups.remove(group);
}
...
}
组:
@Entity
public class Group {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
...
@ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
@JoinTable(name = "GroupToUser", joinColumns =
@JoinColumn(name = "GroupId", referencedColumnName="Id"), inverseJoinColumns =
@JoinColumn(name = "UserId", referencedColumnName="Id"))
private Set<User> users = new HashSet<User>();
public Set<User> getUsers() { return users; }
public void setUsers(Set<User> users) { this.users = users; }
public void addUser(User user) {
user.addGroup(this);
}
publi void removeUser(User user) {
if(!users.contains(user)) return;
users.remove(user);
}
...
}
项目:
@Entity
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
...
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
@JoinColumn(name="UserId")
private User user;
public Set<User> getUser() { return user; }
public void setUser(User user) {
this.user = user;
}
publi void removeUser() {
this.user = null;
}
...
}
我使用 jpa 注释对吗?
我应该在这里写什么?
EntityManager em = getEntityManager();
em.getTransaction().begin();
???
em.getTransaction().commit();
我是否只需要调用 em.remove/persist/merge 方法来进行删除/创建/编辑操作?
什么时候应该在这些操作中使用 javax.persistence.EntityManager.getReference 方法?
【问题讨论】:
-
您似乎明白EntityManager 实例是用来管理JPA 实体的。你试过测试吗?
标签: java jpa eclipselink jpa-2.1