我实际上是在寻找一个“@Ignore”类型的注释,我可以用它来停止某个特定字段的持久化。如何实现这一目标?


当前回答

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

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

如果你需要混合JPA和JSON(JPA省略,但仍然包含在Jackson中)使用@JsonInclude:

@JsonInclude()
@Transient
private String token;

TIP:

你也可以使用JsonInclude.Include。当token == null时,在反序列化期间在JSON中隐藏NON_NULL字段:

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

其他回答

有时候你想:

序列化一个列 忽略被持久化的列:

使用@Column(name = "columnName", insertable = false, updatable = false)

一个好的场景是通过使用其他列值自动计算某个列

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

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

如果你需要混合JPA和JSON(JPA省略,但仍然包含在Jackson中)使用@JsonInclude:

@JsonInclude()
@Transient
private String token;

TIP:

你也可以使用JsonInclude.Include。当token == null时,在反序列化期间在JSON中隐藏NON_NULL字段:

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

使用@Transient使JPA忽略字段。

但是!Jackson也不会序列化该字段。要解决这个问题,只需添加@JsonProperty

一个例子

@Transient
@JsonProperty
private boolean locked;

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

None of the above answers worked for me using Hibernate 5.2.10, Jersey 2.25.1 and Jackson 2.8.9. I finally found the answer (sort of, they reference hibernate4module but it works for 5 too) here. None of the Json annotations worked at all with @Transient. Apparently Jackson2 is 'smart' enough to kindly ignore stuff marked with @Transient unless you explicitly tell it not to. The key was to add the hibernate5 module (which I was using to deal with other Hibernate annotations) and disable the USE_TRANSIENT_ANNOTATION feature in my Jersey Application:

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>