@Transient注解对于方法有什么意义?

17

我了解到在Java中transient关键字表示一个实体不会被持久化,而在JPA中@Transient注解表示不将一个字段持久化到数据库。但是当@Transient应用于方法而不是变量时,它是什么意思呢?

我在我们的代码中找到了这个:

@Transient
public boolean getTabFoo() {
    if ((this.viewFoo1 != ACCESS_NONE)
            || (this.viewFoo2 != ACCESS_NONE) || (this.viewFoo3 != ACCESS_NONE)
            || (this.getViewFoo4() != ACCESS_NONE)) {
        return true;
    }
    return false;
}
2个回答

17

所有字段级别的JPA注释可以放置在字段或属性上,这决定了实体的访问类型(即JPA提供程序将如何访问该实体的字段-直接访问还是使用getter/setter)。

默认访问类型由@Id注释的放置位置确定,并且对于实体的所有字段(或继承实体层次结构),它应该保持一致,除非通过@Access显式覆盖某些字段。

因此,如果您的实体的默认访问类型是属性访问,则@Transient在getter上具有与@Transient在字段上相同的意义-您需要使用@Transient注释所有不对应于持久属性的getter。


谢谢,这使得情况更清晰了。所以仅因为它是getter,它才被用于方法中,对吗? - starsplusplus
如果 AccessType 确实是 Field,但在 Getter 方法 上仍然使用了 @Transient(而且它不是一个简单的一行 Getter 直接关联到一个 Field(关于命名约定)),那该怎么办?例如这个 - Nor.Z

1

这是一个合适的getter方法,JPA默认会认为它与实体属性绑定。如果你不想让JPA将getter视为属性,可以在方法上应用@Transient注解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接