1
我有兩個實體Users和Annotations,我想將Annotations表上的查詢結果集添加到Users實體中的瞬態變量中。如何將實體查詢的結果集映射到實體中的變量
實體:
用戶
@Entity
public class Users {
@Id
@GeneratedValue
@Column(name="user_id")
private Long userId;
@Column(name="username", unique=true, nullable=false)
private String username;
@Transient
private Set<Annotation> annotations;
.....
批註
@Entity
@Table(name="Annotation")
public class Annotation {
@Id
@GeneratedValue
@Column(name="anno_id")
private Long annoId;
@Column(name="user_id", nullable=false)
private Long userId;
@Enumerated(EnumType.STRING)
@Column(name="access_control", nullable=false)
private Access accessControl;
@Column(name="group_id", nullable=true)
private Long groupId;
.....
所以我希望Set<Annotation> annotations
變量從註解表的查詢結果舉行。這不能簡單地是一對多的映射,因爲我必須以特定的方式限制結果。事實上,查詢是這樣的:
SELECT anno_id, a.user_id, timestamp, is_redacted, access_control, a.group_id, vocabulary_id, key_, value, target_type, target_id, root_type, root_id FROM Annotation AS a
LEFT JOIN group_membership g ON g.user_id = ?#{ principal?.getId() }
WHERE a.user_id = :id
AND (a.access_control='PUBLIC'
OR (a.access_control='GROUP' AND a.group_id = g.group_id
OR (a.access_control='PRIVATE' AND g.user_id = a.user_id))
GROUP BY a.anno_id
我認爲這是可能通過SQLResultSetMapping,但是,它好像結果總是映射到另一個獨立的實體。是否有可能將集合提取爲集合並將其存儲爲我想要的方式?