Я пытаюсь присоединиться к различным объектам из одной таблицы, используя постоянное значение в заявлении объединения. В SQL, я хотел бы сделать что-то вроде этого ...JPA/Hibernate Join On Постоянное значение
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 */
}
Заранее спасибо!
Смешная история ... мы закончили ремоделирование данных, чтобы каждый из подтипов имел уникальный порядковый номер для первичного ключа. Но я попробовал ваше решение, и он полностью сработал! Спасибо за помощь! – EvilJoe