我实际上是在寻找一个“@Ignore”类型的注释,我可以用它来停止某个特定字段的持久化。如何实现这一目标?
当前回答
使用@Transient使JPA忽略字段。
但是!Jackson也不会序列化该字段。要解决这个问题,只需添加@JsonProperty
一个例子
@Transient
@JsonProperty
private boolean locked;
其他回答
显然,使用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;
}
}
@瞬态符合您的需求。
为了完成上面的回答,我使用了一个XML映射文件,其中@Transient和transient都不工作… 我必须把临时信息放在xml文件中:
<attributes>
(...)
<transient name="field" />
</attributes>
要忽略一个字段,请使用@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;
推荐文章
- 如何从命令行在windows中找到mysql数据目录
- 如何找到MySQL的根密码
- JavaFX应用程序图标
- Java:强/软/弱/幻影引用的区别
- 在序列化和反序列化期间JSON属性的不同名称
- 获取Android设备名称
- Gradle代理配置
- 如何获得具有已知资源名称的资源id ?
- 在Android上将字符串转换为整数
- 为什么“System.out。”println“工作在Android?
- 在Java中什么时候使用可变参数?
- Mockito的argumentCaptor的例子
- 我如何告诉Spring Boot哪个主类用于可执行jar?
- 如何将Java8流的元素添加到现有的列表中
- 在Java 8中是否可以转换流?