我有一个记录表(为简单起见,我省略了 setter 和其他属性):
@Entity
@Table(name="RECORD")
public class Record {
private long id;
@Id
@GeneratedValue
@Column(name="ID")
public long getId() {
return id;
}
}
和记录冲突表:
@Entity
@Table(name = "RECORD_COLLISION")
public class RecordCollision {
private long id;
private Record firstRecord;
private Record secondRecord;
@Id
@GeneratedValue
@Column(name = "ID")
public long getId() {
return id;
}
@ManyToOne()
@JoinColumn(name = "FIRST_RECORD")
public Record getFirstRecord() {
return firstRecord;
}
@ManyToOne()
@JoinColumn(name = "SECOND_RECORD")
public Record getSecondRecord() {
return secondRecord;
}
}
我需要选择与指定记录发生冲突的所有记录。我尝试使用这个 HQL 查询:
SELECT CASE WHEN rc.firstRecord = :record THEN rc.secondRecord ELSE rc.firstRecord END
FROM RecordCollision rc
WHERE rc.firstRecord = :record OR rc.secondRecord = :record
我需要使用 CASE 语句,因为指定的记录可以在 firstRecord 列中,在这种情况下我需要返回 secondRecord,反之亦然。
问题是,在执行 query.list() 之后,我没有得到 Record 实例的列表,而是包含一个 Object 实例的列表。似乎 Hibernate 不知道它应该将 CASE 语句的结果作为 Record 的实例返回。这应该怎么做?