我正在使用 Hibernate 并尝试在实体中构建用于 SELECT
查询的下一个逻辑。创建一个连接列,其中如果教授的 name = NULL
值,则选择教师姓名的值。
教师表代码:
@Entity
@Table(name = "teacher")
public class Teacher {
@Id
@Column(name = "id_number)
private String id;
@OneToOne
@JoinColumn(name = "t_name")
private Professor name;
// Getters and Setters ...
}
教授表代码:
@Entity
@Table(name = "professor")
public class Professor{
@Id
@Column(name = "id_number)
private String id;
@Column(name = "p_name")
private String name;
// Getters and Setters ...
}
工作 SQL 查询示例:
select
t.id_number as "Identification Number",
isnull(p.p_name, t.t_name) as "Name"
from teacher t
left join professor p
on t.t_name = p.p_name
where id_number in (23, 24, 25, 26, 27)
我应该在我的实体中更改什么来复制上面 SQL 查询的逻辑?非常感谢您提供的任何帮助。
最佳答案
我不确定您是否可以在字段(name
)级别提供注释来实现此目的。
我的猜测是,如果存在类似的情况,那么它可能会导致更新也以相同的方式运行。 (用教授的名字覆盖老师的名字)
其他几个解决方案:
Hibernate 的 Formula注释:
创建另一个变量,如actualName
并提供带有 Coalesce 的公式注释(我之前使用它在一个字段为空时返回另一个字段)。@Formula("COALESCE(nullableField, backupField)")
我不确定您是否可以在其中使用映射实体,如果不能,您必须使用 JoinColumnOrFormula注释并为此编写查询。
为此新字段
actualName
创建一个getter,它将检查教授的姓名是否存在然后返回。否则返回老师的名字。这将消除编写另一个查询的需要。您还可以修改教师类中
name
字段的 getter,以返回您想要的另一个字段。 注意:如果教授的姓名存在,这也会导致您对教师表进行更新操作,将教师的姓名替换为教授的姓名。完全不推荐
关于java - 当 value1 为 NULL 时,Hibernate 实体连接替换 value2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41849134/