java - 当 value1 为 NULL 时,Hibernate 实体连接替换 value2

标签 java sql hibernate

我正在使用 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)级别提供注释来实现此目的。
我的猜测是,如果存在类似的情况,那么它可能会导致更新也以相同的方式运行。 (用教授的名字覆盖老师的名字)

其他几个解决方案:

  1. Hibernate 的 Formula注释:
    创建另一个变量,如 actualName 并提供带有 Coalesce 的公式注释(我之前使用它在一个字段为空时返回另一个字段)

    @Formula("COALESCE(nullableField, backupField)")
    

    我不确定您是否可以在其中使用映射实体,如果不能,您必须使用 JoinColumnOrFormula注释并为此编写查询。

  2. 为此新字段actualName创建一个getter,它将检查教授的姓名是否存在然后返回。否则返回老师的名字。这将消除编写另一个查询的需要。

  3. 您还可以修改教师类中 name 字段的 getter,以返回您想要的另一个字段。 注意:如果教授的姓名存在,这也会导致您对教师表进行更新操作,将教师的姓名替换为教授的姓名。完全不推荐

关于java - 当 value1 为 NULL 时,Hibernate 实体连接替换 value2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41849134/

相关文章:

java - Java 数据连接对话框

java - 如何打印sql表中的所有值而不是仅第一行

php - MySQL不显示数据

java - 在JAVA中设置文档边距

java - java中的二维对象数组

java - Log4j 2.16.0 java 8

sql - 如何使用空字符串具有空值的主键?

hibernate - hibernate :事务未成功启动(线程化webapp)问题!

java - Spring Restful Web 服务验证

java - oracle海量数据复杂报表