这是我的多对多收藏品:
@ManyToMany
@JoinTable(name="affiliated_databases",
joinColumns=
@JoinColumn(name="database_id", referencedColumnName="id"),
inverseJoinColumns=
@JoinColumn(name="affiliated_database_id", referencedColumnName="id")
)
public Set<Database> affiliatedOrgs;
在我的服务类方法中,我只有这个集合的ID。 有没有很好的解决方案来坚持这个集合而不从数据库中读取它的元素?
我正在尝试做这样的事情:
for (Long affId: affIds) {
Database affDatabase = new Database();
affDatabase.setId(affId);
target.getAffiliatedOrgs.add(affDatabase);
}
dao.save(target);
这是工作,但1)它看起来不知何故不优雅; 2)如果这个目标对象将来会被某个地方使用,它可能会产生错误...或者这可能是一个很好的解决方案而且我的怀疑是徒劳的?
因此,有更优雅的方法可以持久保存此集合,而无需从数据库中读取所有对象,并且未来不会引发错误。
答案 0 :(得分:2)
您可能想要使用EntityManager.getReference()
。它创建了一个实体“代理”对象,其所有属性都被延迟取出(如果需要)。
获取一个实例,其状态可能会被懒散地取出。如果数据库中不存在请求的实例,则在首次访问实例状态时将引发EntityNotFoundException。 (在调用getReference时,允许持久性提供程序运行时抛出EntityNotFoundException。)应用程序不应期望实例状态在分离时可用,除非在实体管理器打开时应用程序访问它。