在我的项目中,实体结构如下。
public class FriendId {
private String profileFrom;
private String profileTo;
...
}
对于用作 PK 的 Friend 实体 - FriendId。
@Entity
@Table(name = "FRIEND")
@IdClass(FriendId.class)
public class Friend {
@Id
@ManyToOne
@JoinColumn(name = "PROFILE_UUID_1", nullable = false)
private Profile profileFrom;
@Id
@ManyToOne
@JoinColumn(name = "PROFILE_UUID_2", nullable = false)
private Profile profileTo;
...
}
问题是我不能加入该方法findFriendsByUser
。
public List<User> findFriendsByUser(String userUuid) {
CriteriaBuilder builder = getEntityManager().getCriteriaBuilder();
CriteriaQuery<User> query = builder.createQuery(User.class);
Root<User> userRoot = query.from(User.class);
Join<User, Profile> profileJoin = userRoot.join(PROFILES);
Join<Profile, Friend> friendsJoin = profileJoin.join(FRIENDS);
Join<Friend, Profile> profileFriendsJoin = friendsJoin.join(PROFILE_TO);
Join<Profile, User> userFriendsJoin = profileFriendsJoin.join(USER);
Predicate userPredicate = builder.equal(userFriendsJoin.get(UUID), userUuid);
query.select(userRoot).where(userPredicate);
return getEntityManager().createQuery(query).getResultList();
}
我抓住了这个例外:
java.lang.RuntimeException: java.lang.IllegalArgumentException: Unable to resolve attribute [profileTo] against path [null]
使用注解@Embeddable 的唯一解决方案?