我实际上是在寻找一个“@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;

其他回答

要忽略一个字段,请使用@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)

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

显然,使用Hibernate5Module时,如果使用ObjectMapper, @Transient将不会被序列化。移除会让它起作用。

import javax.persistence.Transient;

import org.junit.Test;

import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class TransientFieldTest {

    @Test
    public void Print_Json() throws JsonProcessingException {

        ObjectMapper objectEntityMapper = new ObjectMapper();
        //objectEntityMapper.registerModule(new Hibernate5Module());
        objectEntityMapper.setSerializationInclusion(Include.NON_NULL);

        log.info("object: {}", objectEntityMapper.writeValueAsString( //
                SampleTransient.builder()
                               .id("id")
                               .transientField("transientField")
                               .build()));

    }

    @Getter
    @Setter
    @Builder
    private static class SampleTransient {

        private String id;

        @Transient
        private String transientField;

        private String nullField;

    }
}

@瞬态符合您的需求。

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