【发布时间】:2015-10-26 18:00:23
【问题描述】:
有没有办法确定给定的例如实体类:
@Entity
class A {
String name;
}
boolean method(Object anyEntity) {
// How can I check here, if this entity is completely new
}
我所说的 new 是指有人调用了 new A() 甚至可能设置了名称,但从未保存或保留。
通常可以检查 id,但我想要一种不需要 id 或 getId() 方法的解决方案。
基本上,这个实体是否已经持久化到数据库中,即使在分离模式下也是如此。
@Version 或 getVersion 也不是令人满意的解决方案。
也许是分离的|| isAttached 可能有效,但我不确定如何在 Hibernates API 上进行调用。
编辑:
另外澄清一下,我不控制实体,所以我不能向它们添加任何字段。解决方案应该尝试利用底层机制来确定这一点。
【问题讨论】:
-
如果没有id字段怎么办? \@Id 也可以在任何字段上设置,并且不必命名为 id。例如 \@Id 字符串名称;在这里会失败。
-
不确定这是否可以在分离模式下实现。
-
如果您使用
@Id和@Version的引用类型,为什么id == null或version == null不起作用?毕竟,只有当实体被持久化到数据库时才会设置这些字段,这是唯一可以说实例是new的情况。 -
版本不是必需的。也许@id 是,但它不必自动生成,但可以手动设置。
-
JPA 托管实体需要有一个强制性的
@Id字段。如果标识符是手动分配的,那么在不更改实体类和不访问数据库的情况下,无法判断实例是否尚未持久化或已分离。如果您无法更改实体类,则可以使用方面注入字段。此外,请确保一次性将所有必要信息添加到您的问题中。现在,随着答案的出现,您似乎正在添加信息,并且开始看起来您这样做只是为了反驳用户为提供答案而付出的努力。