gpt4 book ai didi

java - JPA 多对多和权威列表

转载 作者:太空宇宙 更新时间:2023-11-04 07:29:21 25 4
gpt4 key购买 nike

我有一个多对多关系的人 - 偏好(这原则上是一个权限列表)。

映射表是person_has_preferences。

我的目标是在“人员”表中添加一个新对象,而不在“首选项”中添加该对象。在当前配置下,所有 3 个表均已更新。

这是我的对象配置:

人物:

@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "person_has_preference", joinColumns = { @JoinColumn(name = "person_id", nullable = false) }, inverseJoinColumns = { @JoinColumn(name = "preference_id", nullable = false) })
private List<Preference> preferences = new ArrayList<Preference>();

偏好:

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "person_has_preference", joinColumns = { @JoinColumn(name = "preference_id", nullable = false) }, inverseJoinColumns = { @JoinColumn(name = "person_id", nullable = false) })
private List<Person> persons;

持久化在这里完成:

EntityManager em = EMF.get().createEntityManager();
em.getTransaction().begin();
if (em.find(Person.class, c.getId()) == null)
em.persist(c);// new contact
else
em.merge(c);// update existing contact

em.getTransaction().commit();

我还注意到,即使对象 Preference 存在(有 ID),JPA 总是创建一个新 ID。日志:

[EL Fine]: sql: 2013-08-01 10:22:58.244--ClientSession(2012226930)--Connection(583259044)--Thread(Thread[615154846@qtp-1915686435-7,5,main])--INSERT INTO 首选项(名称、父级、类型)值小号(?,?,?) 绑定(bind) => [每周更新,null,1][EL Finest]: query: 2013-08-01 10:22:58.248--ClientSession(2012226930)--Thread(Thread[615154846@qtp-1915686435-7,5,main])--执行查询 ValueReadQuery(name="SEQ_GEN_IDENTITY"sql="SELECT LAST_INSERT_ID()")[EL细]: sql: 2013-08-01 10:22:58.25--ClientSession(2012226930)--Connection(583259044)--Thread(Thread[615154846@qtp-1915686435-7,5,main])--SELECT LAST_INSERT_ID()[EL Finest]:排序:2013-08-01 10:22:58.253--UnitOfWork(925539554)--Thread(Thread[615154846@qtp-1915686435-7,5,main])--将序列分配给对象(126 -> org.icg.contacts.manager.shared.jpa.Preference@19 eed47)

最佳答案

您正在使用 CascadeType.ALL 来启用插入。根据您的需要更改您的 CascadeType,例如 CascadeType.REFRESH 或 CascadeType.REMOVE 等。

每个级联选项的简单解释:http://www.objectdb.com/api/java/jpa/CascadeType

关于java - JPA 多对多和权威列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17991495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com