【问题标题】:Spring Data JDBC - @Column annotation does't work on setterSpring Data JDBC - @Column 注释在 setter 上不起作用
【发布时间】:2021-03-26 10:21:03
【问题描述】:

我需要在 fetch 上转换实体的字段,并根据this official example 我尝试使用自定义设置器来做到这一点:

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Transient;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;


@Table("entity")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder(builderClassName = "EntityBuilder")
public class Entity {

    @Id
    private String someId;

    @Transient
    private String entityName;

    @Column("entity_name")
    public String getEntityNameUnmodified() {
        return this.entityName;
    }

    @Column("entity_name")
    public void setEntityNameUnmodified(String em) {
        this.entityName = em + " Some modification";
    }
}

但这完全行不通,结果我得到了EntityentityName == null

我已经下载了 GitHub 示例并在本地运行它,一切正常。我的代码有什么问题?

【问题讨论】:

    标签: java spring jdbc spring-data spring-data-jdbc


    【解决方案1】:

    由于缺少@AccessType(AccessType.Type.PROPERTY) 注释,我的代码无法运行。

    工作解决方案:

    import lombok.AllArgsConstructor;
    import lombok.Builder;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import org.springframework.data.annotation.AccessType;
    import org.springframework.data.annotation.Id;
    import org.springframework.data.annotation.Transient;
    import org.springframework.data.relational.core.mapping.Column;
    import org.springframework.data.relational.core.mapping.Table;
    
    
    @Table("entity")
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder(builderClassName = "EntityBuilder")
    @AccessType(AccessType.Type.PROPERTY) // IMPORTANT !!!
    public class Entity {
    
        @Id
        private String someId;
    
        @Transient
        private String entityName;
    
        @Column("entity_name")
        public String getEntityNameUnmodified() {
            return this.entityName;
        }
    
        @Column("entity_name")
        public void setEntityNameUnmodified(String em) {
            this.entityName = em + " Some modification";
        }
    }
    

    问题是 Spring Data JDBC 默认使用字段作为实体列的访问器,并且没有注释设置器和获取器被忽略。启用PROPERTY访问类型即可解决问题。

    【讨论】:

      猜你喜欢
      • 2017-06-03
      • 2013-12-27
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多