我有三个实体,一个父母有两个孩子,但我在这里只列出了两个实体 .
@Entity
@Table(name = "person")
public class Person{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Long id;
@Column(name = "name")
private String name;
@OneToMany(fetch=FetchType.EAGER)
private Set<Phone> phones = new HashSet<Phone>();
@OneToMany(fetch=FetchType.EAGER)
@JoinColumn(name="person_id", referencedColumnName="id")
private List<Book> books = new ArrayList<Book>();
}
@Entity
@Table(name = "book")
public class Book{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Long id;
@Column(name="person_id")
private Long personId;
}
当我按照Hibernate标准运行并注意到SQL生成的日志时,它正在加入两个孩子 - 电话和书籍 . 我和这两个孩子没有任何关系 . 为什么从Hibernate标准生成的SQL查询尝试加入无关的两个孩子?我希望父母和孩子之间能够加入,而不是孩子之间 .
Criteria criteria = session.createCriteria(Person.class)
.add(Restrictions.in("id", ids))
.setFetchMode("phones", FetchMode.JOIN).setFetchMode("books", FetchMode.JOIN)
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
result = criteria.list();
1 回答
如果要使用条件,则需要为每个关系发出两个条件:
否则你可以使用hql而不是标准,并具有:
EDIT: