Java 休眠:选择OneToMany关系中的位置
以下是我的缩写实体:Java 休眠:选择OneToMany关系中的位置,java,hibernate,postgresql,jpa,jpql,Java,Hibernate,Postgresql,Jpa,Jpql,以下是我的缩写实体: @Entity public class User { @OneToMany(fetch=FetchType.LAZY) @JoinTable(name="user_items",joinColumns=@JoinColumn(name="user_id"),inverseJoinColumns=@JoinColumn(name="useritem_id")) private Set<UserItem> items = Sets.new
@Entity
public class User {
@OneToMany(fetch=FetchType.LAZY)
@JoinTable(name="user_items",joinColumns=@JoinColumn(name="user_id"),inverseJoinColumns=@JoinColumn(name="useritem_id"))
private Set<UserItem> items = Sets.newHashSet();
}
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class UserItem {
@Id
@Type(type=EntityConstants.TYPE_UUID)
@Column(columnDefinition=EntityConstants.COL_UUID)
private UUID id;
}
@Entity
public class UserItemFurniture extends UserItem {
}
但它产生了这种荒谬的SQL:
select useritemfu0_.id as id17_, useritemfu0_1_.item as item17_, useritemfu0_.roomNumber as roomNumber18_, useritemfu0_.x as x18_, useritemfu0_.y as y18_
from UserItemFurniture useritemfu0_ inner join UserItem useritemfu0_1_ on useritemfu0_.id=useritemfu0_1_.id
where useritemfu0_.id=? and (useritemfu0_.id in (
select .
from _User user1_, user_items items2_, UserItem useritem3_
where user1_.id=items2_.user_id and items2_.useritem_id=useritem3_.id and user1_.id=?
))
limit ?
注意子查询:SELECT
我可以在不使用本机或多个查询的情况下执行此操作吗?请注意,UserItem没有对用户的引用,这是出于设计考虑。可以使用以下查询:
SELECT f
FROM UserItemFurniture f
WHERE f.id = :uid AND EXISTS
(SELECT u FROM User u
WHERE u.id = :iid and f MEMBER OF u.items)
你试过在条款中用id限制吗?类似于从用户选择u.items.id中的…和f.id…不可能使用u.items.id,因为作为集合值路径的项引用整个集合,因此它没有属性id,即使集合元素也没有属性id。
SELECT f
FROM UserItemFurniture f
WHERE f.id = :uid AND EXISTS
(SELECT u FROM User u
WHERE u.id = :iid and f MEMBER OF u.items)