java - JPA/Hibernate 加入常量值

标签 java hibernate jpa

我正在尝试使用连接语句中的常量值连接同一个表中的不同实体。在 SQL 中,我会做这样的事情......

SELECT *
FROM owner o
JOIN types t on t.owner_id = o.id AND t.type = 'A'
--                                ^^^^^^^^^^^^^^^^ THIS IS WHAT I AM TRYING TO REPLICATE

在 Java + JPA/Hibernate 中,我正在尝试做这样的事情......

@Entity
@Table(name = "OWNER")
public class Owner {

    @Id
    @Column(name="ID")
    private Long id

    @OneToOne(mappedBy = "owner", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumns({
        @JoinColumn(name = "ID", referencedColumnName = "ID"),
        @JoinColumn(constantValue = "A", referencedColumnName="type")})
    //              ^^^^^^^^^^^^^^^^^^^  I AM LOOKING FOR SOMETHING THAT DOES THIS.
    //                                   constantValue IS NOT A VALID ARGUMENT HERE.
    private TypeA inspectionSnapshot;

    @OneToOne(mappedBy = "owner", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumns({
        @JoinColumn(name = "ID", referencedColumnName = "ID"),
        @JoinColumn(constantValue = "B", referencedColumnName="type")})
    private TypeB inspectionSnapshot;

    /* Getters & Setters ... */
}

@Entity
@Table(name = "TYPES")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.STRING)
public abstract class BaseType {

    @Id
    @OneToOne
    @JoinColumn(name = "OWNER_ID", referencedColumnName="ID")
    private Owner id;

    @Id
    @Column(name = "TYPE")
    private char type

    /* Getters & Setters ... */
}

@Entity
@DiscriminatorValue("A")
public class TypeA extends BaseType {
    /* All functionality in BaseType */
}

@Entity
@DiscriminatorValue("B")
public class TypeA extends BaseType {
    /* All functionality in BaseType */
}

提前致谢!

最佳答案

尝试指定一个常量作为公式的值

@JoinColumnsOrFormulas({
@JoinColumnOrFormula(formula=@JoinFormula(value="'A'", referencedColumnName="type")),
@JoinColumnOrFormula(column = @JoinColumn("id", referencedColumnName="id"))
})
private TypeA inspectionSnapshot;

关于java - JPA/Hibernate 加入常量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28818511/

相关文章:

Javafx HBox 限制到特定高度

java - JFrame 突然包含蓝色背景

Java Hibernate 为什么namedQuery上的executeUpdate首先执行全表更新?

java - 无法 Autowiring 存储库字段

java - 注释 ConcurrentHashMap 时处于 hibernate 状态的 "Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements"

java - 使用 JPA 时构建器模式的最佳实践和实现

java - Java RMI 远程对象可以在次要回收中进行垃圾回收吗?

java - 从 hibernate 数据库获取数据需要太长时间

java - 基本类型的一对一映射,到 Hibernate 中的单个类

java - eclipse for 循环分配按钮字符串