gpt4 book ai didi

java - JPA 新手 - 每次保存包含实体时不要保存现有成员

转载 作者:行者123 更新时间:2023-12-01 15:30:40 26 4
gpt4 key购买 nike

我仍然不完全清楚实体状态,并且我针对以下情况尝试了一些方法但没有成功:

@Entity
public class Foo {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", nullable = false)
private long id;
/* other fields */
@NotNull
@ManyToOne
@JoinColumn(name = "related_bar", nullable = false)
private Bar bar;
/* getters & setters */
}

@Entity
public class Bar {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", nullable = false)
private long id;
/* other fields & methods*/
}

通常,当从 Foo 创建表单发送数据时,将发送相关栏的 ID(但不会发送其其他属性,它们在那里没有任何用处)。是否有任何自动方法告诉实体管理器附加(而不是持久化)一个 Bar 实例,其 ID 在持久化新的 Foo 时设置?

预先感谢您的帮助!

罗尔夫

最佳答案

Bar bar = em.getReference(Bar.class, barId);
foo.setBar(bar);

getReference() 甚至不访问数据库:它返回实际 Bar 的代理。如果不存在,则由于foreigk键引用错误,将在刷新时抛出错误。如果您想检查实体是否存在:

Bar bar = em.find(Bar.class, barId);
if (bar == null) {
throw someException();
}
foo.setBar(bar);

关于java - JPA 新手 - 每次保存包含实体时不要保存现有成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9553876/

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