admin 管理员组文章数量: 1184232
Spring data JPA使用@formula注解使用、查询不到内容
@Formula注解就是使用查询语句动态生成类的一个属性,是一个虚拟的列,其并不存储在数据库中。
以下为一个与数据表映射的实体:
@Data
@Entity
@Table ( name ="t_organization" )
@GenericGenerator(name = "jpa_uuid", strategy = "uuid")
public class IndRiskClue implements Serializable {private static final long serialVersionUID = 1786368157796487306L;@Id@GeneratedValue(generator = "jpa_uuid")@Column(name = "id" )private String id;@Column(name = "org_name" )private String orgName;//所属区划code@Column(name = "region_code" )private String regionCode;//所属区划名称@Formula(value = "(select c.area_name from t_area c where c.area_code=region_code)")private String areaName;
}
注意:@Formula注解必须在属性上,在方法上将失效
当使用JPA的findById()方法查询该实体时,会展示相应所属区划的名称,即:areaName字段
- 记使用@Formula注解时出现的问题:
问题一
上面的代码使用了lombok的@Data注解,其在实体中自动生成了get和set方法。有一次使用@Formula注解时,实体的get和set方法不是使用注解自动生成的,当查询实体时出现了@Formula注解标注的字段不显示的问题,最后排查到是因为被注解字段没有get方法所致(set方法并不会影响该字段的获取),加上该字段的get方法后查询的结果显示完全。
问题二
问题出现场景:首先更新具有@Formula注解的实体,更新方法返回的不是void,而是当前更新的实体。
此时明明更新是成功的,但是返回的实体中@Formula注解的字段为空,如下代码:
使用@Formula注解的实体:
@Entity
@Data
@Table(name = "t_org_rel", schema = "XXX")
public class OrgRel implements java.io.Serializable{@Id@Column(name = "id")private Long id;@Basic@Column(name = "org_id")private Integer orgId;@Basic@Column(name = "org_location")private String orgLocation;//.......@Formula("(select t_name from org_info t where t.id = org_id)")private String orgName;
}
更新接口需要传入的实体:
@Data
public class OrgRelDto {private OrgInfo orgInfo;private OrgRel orgRel;
}
具体更新方法:
该方法更新OrgRel,并且返回OrgRel
public OrgRel update(OrgRelDto entity) {repository.save(entity.getOrgRel());return findByOrgId(entity.getOrgRel().getOrgId());
}
//此方法在controller处也有调用
public OrgRel findByOrgId(Integer orgId) {OrgRel tAuthOrgRel = repository.findByOrgId(orgId);return tAuthOrgRel;
}
问题出现的原因:
更新时传入的参数OrgRelDto中的orgRel也有orgRel字段,且该字段传入了空值,所以更新后返回的OrgRel中orgName也是空值
解决问题
只需要在更新时不传入orgRel中的orgName字段,注意不传入是指更新时OrgRel压根就没有orgName字段
本文标签: Spring data JPA使用formula注解使用查询不到内容
版权声明:本文标题:Spring data JPA使用@formula注解使用、查询不到内容 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.roclinux.cn/p/1698026092a283303.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论