修剪 JPA 中的映射列
Posted
技术标签:
【中文标题】修剪 JPA 中的映射列【英文标题】:trim mapping columns in JPA 【发布时间】:2021-03-20 19:24:32 【问题描述】:我有两张表,即员工和部门。两个表都与列部门代码映射。我在这之间使用@OneToOne 关系。但是由于部门代码中的空格,我的查询失败了。
@Table(name = "EMP_MASTER")
public class Employee
@Id
@Column(name = "idcode")
private String idcode;
@OneToOne
@JoinColumn(name="DEPT_CD", referencedColumnName = "DEPT_CD")
private Department dept;
//some more columns
@Table(name = "DEPT_MASTER")
public class Department
@Id
@Column(name = "DEPT_CD")
private String deptCode;
//some more columns
在存储库中,我使用的是简单的查询方法。
Optional<Employee> findByIdcodeIs(String idcode);
查询也很完美;但是这个连接不能正常工作。
left outer join
dept_master deptmaster1_
on employee0_.dept_cd=deptmaster1_.dept_cd
而不是这个,如果我使用 TRIM() 在数据库级别更改以下查询,那么它会给我正确的结果。
left outer join
dept_master deptmaster1_
on TRIM(employee0_.dept_cd)=TRIM(deptmaster1_.dept_cd)
那么有没有办法在映射级别上应用修剪?
【问题讨论】:
【参考方案1】:要在映射级别更改值,您可以尝试 JPA aAttribute 转换器。然后应用于映射字段。
示例: 映射:
@Id
@Column(name = "DEPT_CD")
@Convert(converter = TrimConverter.class)
private String deptCode;
转换器:
public class TrimConverter implements AttributeConverter<String, String>
@Override
public String convertToDatabaseColumn(String value)
return value.trim();
@Override
public String convertToEntityAttribute(String value)
if (value == null)
return null;
return value.trim();
【讨论】:
@Convert
不适用于 @JoinColumn
或 @Id
注释【参考方案2】:
我通过在这些列上应用修剪来创建表格视图。这解决了我的问题。 我知道这不是正确的解决方案。期待更多答案。
【讨论】:
您找到其他解决方案了吗?我有同样的问题,我不想创建视图。提前致谢以上是关于修剪 JPA 中的映射列的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JPA/Hibernate 注释将 MySQL char(n) 列映射到实例变量?
如何将 TIMESTAMP 列映射到 ZonedDateTime JPA 实体属性?