Evi*_*Joe 9 java hibernate jpa
我试图使用join语句中的常量值连接到同一个表中的不同实体.在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
Run Code Online (Sandbox Code Playgroud)
在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 */
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
如果您不介意使用特定于Hibernate的注释,则可以尝试使用该@WhereJoinTable注释,例如:
@OneToOne(mappedBy = "owner", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "ID", referencedColumnName = "ID")
@WhereJoinTable(clause = "TYPE = 'A'")
private TypeA inspectionSnapshot;
Run Code Online (Sandbox Code Playgroud)
请注意,该clause属性必须包含SQL,而不是JPQL,因此您需要使用数据库列名而不是JPA实体字段名。
尝试指定一个常量作为公式的值
@JoinColumnsOrFormulas({
@JoinColumnOrFormula(formula=@JoinFormula(value="'A'", referencedColumnName="type")),
@JoinColumnOrFormula(column = @JoinColumn("id", referencedColumnName="id"))
})
private TypeA inspectionSnapshot;
Run Code Online (Sandbox Code Playgroud)
您正在查看非标准连接。以下是处理此类情况的文档:
http://docs.oracle.com/cd/E13189_01/kodo/docs40/full/html/ref_guide_mapping_notes_nonstdjoins.html
希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
9505 次 |
| 最近记录: |