我面临一个类似于 Tinder 匹配逻辑的问题,所以我以它为例。
我的用户可以通过具有两个用户引用的公共匹配实体在彼此之间进行“匹配”。
@Data
@Entity
@Table(name = "match")
@EqualsAndHashCode(callSuper = true)
public class Match extends PanacheEntity {
@Column(name = "matchDate")
Calendar matchDate;
@ManyToOne
@JsonIgnore
User userA;
@ManyToOne
@JsonIgnore
User userB;
}
}
我喜欢对用户属于两个用户实体对象的所有匹配项进行单一引用,但是我需要选择(假设使用“mappedBy”)关系的另一端,即第一个或第二个用户。
@Data
@Entity
@Table(name = "user_")
@EqualsAndHashCode(callSuper = true)
public class User extends PanacheEntity {
@Column(name = "email")
String email;
@Column(name = "name")
String name;
// Needs to contain all "Matches", no matter if the user is referenced as "A" or "B"
@OneToMany
List<Match> matches;
}
我希望列表匹配项填充以下查询表示的对象,即与用户相关的所有匹配项,与列无关。
select distinct match.id, user_a_id, user_b_id
from match,
user_
where user_.id = match.user_a_id
or user_.id = match.user_b_id
无论我是被邀请还是被邀请的人,都可以为我作为用户提供与我相关联的任何连接对象。
有没有办法使用 Hibernate 注释来实现它?