我仍然不完全清楚实体状态,并且我针对以下情况尝试了一些方法但没有成功:
@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/