我基本上正在寻找一个“@Ignore”类型的注释,我可以用它来阻止特定字段被持久化 . 怎么能实现这一目标?
@Transient符合您的需求 .
要忽略一个字段,请使用@Transient注释它,以便它不会被hibernate映射 .
但转换为JSON时的字段为 jackson will not serialize .
If you need mix JPA with JSON (由JPA省略,但仍包含在 Jackson 中)使用@JsonInclude:
@JsonInclude() @Transient private String token;
TIP:
在 token == null 时,您还可以在反序列化期间使用JsonInclude.Include.NON_NULL并隐藏JSON中的字段:
token == null
@JsonInclude(JsonInclude.Include.NON_NULL) @Transient private String token;
要忽略一个字段,请使用 @Transient 注释它,以便它不会被hibernate映射 .资料来源:Hibernate Annotations .
@Transient
这个答案有点晚了,但它完成了回复 .
为了避免实体中的字段持久存储在DB中,可以使用以下两种机制之一:
@Transient - 将字段标记为不可持久的JPA注释
java中的 transient 关键字 . 注意 - 使用此关键字,将阻止该字段与java中的任何序列化机制一起使用 . 因此,如果必须序列化该字段,则最好只使用 @Transient 注释 .
为了完成上述答案,我得到了使用XML映射文件的情况,其中 @Transient 和 transient 都没有工作......我必须将瞬态信息放在xml文件中:
transient
<attributes> (...) <transient name="field" /> </attributes>
使用Hibernate 5.2.10,Jersey 2.25.1和Jackson 2.8.9,上述答案都不适用于我 . 我终于找到了答案(有点,他们引用了hibernate4module,但它也适用于5)here . 没有任何Json注释与 @Transient 一起工作 . 显然Jackson2足够'smart'足以忽略标有 @Transient 的东西,除非你明确告诉它不要 . 关键是添加hibernate5模块(我用它来处理其他Hibernate注释)并禁用我的Jersey应用程序中的 USE_TRANSIENT_ANNOTATION 功能:
USE_TRANSIENT_ANNOTATION
ObjectMapper jacksonObjectMapper = new ObjectMapper(); Hibernate5Module jacksonHibernateModule = new Hibernate5Module(); jacksonHibernateModule.disable(Hibernate5Module.Feature.USE_TRANSIENT_ANNOTATION); jacksonObjectMapper.registerModule(jacksonHibernateModule);
这是Hibernate5Module的依赖:
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-hibernate5</artifactId> <version>2.8.9</version> </dependency>
6 回答
@Transient符合您的需求 .
要忽略一个字段,请使用@Transient注释它,以便它不会被hibernate映射 .
但转换为JSON时的字段为 jackson will not serialize .
If you need mix JPA with JSON (由JPA省略,但仍包含在 Jackson 中)使用@JsonInclude:
TIP:
在
token == null
时,您还可以在反序列化期间使用JsonInclude.Include.NON_NULL并隐藏JSON中的字段:要忽略一个字段,请使用
@Transient
注释它,以便它不会被hibernate映射 .资料来源:Hibernate Annotations .
这个答案有点晚了,但它完成了回复 .
为了避免实体中的字段持久存储在DB中,可以使用以下两种机制之一:
@Transient - 将字段标记为不可持久的JPA注释
java中的 transient 关键字 . 注意 - 使用此关键字,将阻止该字段与java中的任何序列化机制一起使用 . 因此,如果必须序列化该字段,则最好只使用 @Transient 注释 .
为了完成上述答案,我得到了使用XML映射文件的情况,其中
@Transient
和transient
都没有工作......我必须将瞬态信息放在xml文件中:使用Hibernate 5.2.10,Jersey 2.25.1和Jackson 2.8.9,上述答案都不适用于我 . 我终于找到了答案(有点,他们引用了hibernate4module,但它也适用于5)here . 没有任何Json注释与
@Transient
一起工作 . 显然Jackson2足够'smart'足以忽略标有@Transient
的东西,除非你明确告诉它不要 . 关键是添加hibernate5模块(我用它来处理其他Hibernate注释)并禁用我的Jersey应用程序中的USE_TRANSIENT_ANNOTATION
功能:这是Hibernate5Module的依赖: