Hibernate未忽略@Transient字段引发查询崩溃问题求助
问题解决思路
核心原因
Hibernate对接口上的@Transient注解支持不友好,默认会把接口中定义的getter方法识别为实体的持久化属性,即使你在接口上加了@Transient,也不会被正确解析。
解决方案1:仅在实体类实现上保留@Transient,并添加空setter
移除接口上的@Transient,只在实体类的getter上标注,同时为了满足Hibernate的属性访问要求,添加一个空实现的setter:
public interface Archiveable { Boolean getArchived(); } @Entity @Table(...) public class Post implements Archiveable { @Override @Transient public Boolean getArchived() { return false; } // 空实现setter,避免Hibernate报错 public void setArchived(Boolean archived) { // 无需任何操作 } }
解决方案2:指定字段访问模式
在实体类上添加@Access(AccessType.FIELD),让Hibernate只通过类的字段来识别持久化属性,忽略所有getter/setter对应的属性:
public interface Archiveable { Boolean getArchived(); } @Entity @Table(...) @Access(AccessType.FIELD) public class Post implements Archiveable { @Override @Transient public Boolean getArchived() { return false; } }
补充说明
这种接口+实体类的结构本身没问题,但Hibernate的属性扫描逻辑会优先处理实体类及其实现的接口中的方法,接口上的@Transient不被Hibernate的注解处理器识别,所以必须在实体类层面明确标记忽略该属性,或者调整访问策略绕开方法扫描。
内容的提问来源于stack exchange,提问作者patman
相关产品推荐
相关产品推荐

