JPA最快的方式来在持久性期间忽略一个字段?

我基本上正在寻找一个“@Ignore”types的注释,我可以阻止一个特定的领域被持久化。 这怎么能实现?

@Transient符合您的需求。

要忽略一个字段,用@Transient对它进行注释,这样它就不会被hibernate映射。

jackson转换为JSON时不会序列化字段。

如果您需要将JPA与JSON混合 (由JPA省略,但仍包含在Jackson中),请使用@JsonInclude

 @JsonInclude() @Transient private String token; 

您也可以使用JsonInclude.Include.NON_NULL,并在token == null反序列化过程中隐藏JSON中的字段:

 @JsonInclude(JsonInclude.Include.NON_NULL) @Transient private String token; 

要忽略一个字段,用@Transient对它进行注释,这样它就不会被hibernate映射。
来源: Hibernate注释 。

这个答案有点晚了,但它完成了答复。

为了避免来自实体的字段被持久化在DB中,可以使用以下两种机制之一:

@Transient – 标记为不可持久的字段的JPA注释

在Java中的瞬态关键字。 注意 – 使用这个关键字,将会阻止这个字段和java的任何序列化机制一起使用。 所以,如果该字段必须被序列化,那么最好使用@Transient注解。

为了完成上面的答案,我使用了一个XML映射文件,@ transienttransient都没有工作…我不得不将瞬态信息放在xml文件中:

 <attributes> (...) <transient name="field" /> </attributes> 

上面的答案都没有为我使用hibernate5.2.10,泽西岛2.25.1和jackson2.8.9。 我终于find了答案(有点,他们引用hibernate4module,但也适用于5) 在这里 。 Json注释都没有@Transient 。 显然jackson2是“聪明的”,足以忽略标有@Transient东西,除非你明确地告诉它不要。 关键是添加hibernate5模块(我正在使用它来处理其他Hibernate注释),并在我的Jersey应用程序中禁用USE_TRANSIENT_ANNOTATIONfunction:

 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>