我有一组自定义对象,我想以最简单的方式使用JPA来保留它。
我的CustomObject
类映射到表。现在我想知道JPA是否提供了某种实用程序来处理对象集合。
特别是我想在我的集合中添加或删除对象,然后传递给save(Collection<CustomObject> cco)
方法,而不检查哪些对象已更改(我需要添加哪些对象以及要删除哪些对象)。 。)
有可能吗?
答案 0 :(得分:8)
如果您正在EntityManager
寻找可以保存或更新集合的内容,答案是肯定的。您必须循环并进行保存或更新。
如果您使用EntityManager.merge()
API,则会在记录存在时更新,否则会插入新记录。
就删除而言,JPA或任何其他ORM将如何确定您要删除该实例,如果是软删除,例如将is_active
更新为true/false
,则是通过调用merge可以完成,但如果你想要硬删除,那么JPA将无法自行确定,你必须手动完成。
答案 1 :(得分:0)
@ElementCollection您要找的是什么?或者您只需要定义@OneToMany关系吗?
答案 2 :(得分:0)
简要说明:所以我有用户及其相应的权利。我希望能够使用这些信息维护我的数据库。
这是我使用的解决方案:
豆类
...
@Entity
public class User implements Serializable {
...
@OneToMany(mappedBy = "idu", cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, orphanRemoval = true)
private List<Userrights> userRightsList;
...
}
...
@Entity
public class Userrights implements Serializable {
...
@JoinColumn(name = "idu", referencedColumnName = "idu")
@ManyToOne
private User idu;
...
}
春天:
@Component
public class UserBean implements IUser {
@Autowired
private MyPersistenceContext<User> pc;
...
@Transactional
@Override
public void update(User user) throws Exception {
pc.update(user, UPDATE_ERR);
}
...
}
@Component
public class MyPersistenceContext<T> {
@PersistenceContext
protected EntityManager EM;
...
public void insert(T object, String errMsg) {
EM.persist(object);
}
public void update(T object, String errMsg) {
EM.merge(object);
}
...
}
public void delete(T object, String errMsg) {
T forDeletion = null;
if (!EM.contains(object)) {
forDeletion = EM.merge(object);
}
if (forDeletion != null) {
EM.remove(forDeletion);
}
}
测试:
@Test
public void testDb_InsertOrUpdateOfExistinguserRights() throws Exception {
User u = null;
try {
u = IAS.DS().user().getByUsername("kor1 username");
} catch (Exception e) {
}
List<Userrights> lur = new ArrayList<>();
boolean newUser = true;
if (u != null) {
newUser = false;
lur = IAS.DS().userRights().get(u);
} else {
u = new User("kor1", "kor1 prezime", "kor1 username", "kor1 pass");
}
if (lur.isEmpty()) {
lur.add(new Userrights(u, IAS.DS().roles().get(1)));
lur.add(new Userrights(u, IAS.DS().roles().get(2)));
lur.add(new Userrights(u, IAS.DS().roles().get(4)));
} else {
lur.clear();
lur.add(new Userrights(u, IAS.DS().roles().get(1)));
lur.add(new Userrights(u, IAS.DS().roles().get(5)));
}
u.setUserRightsList(lur);
if (!newUser) {
IAS.DS().user().update(u);
} else {
IAS.DS().user().insert(u);
}
}