Я использую JPA с Hibernate3 как реализацию. У меня есть таблица ассоциации UsrGrpJPA объединяет таблицу ассоциации с выбором N, сгенерированную Hibernate?
Usr.java
@Id
@Basic(optional = false)
@Column(name = "usr_id")
private String usrId;
@OneToMany(mappedBy = "usr")
private List<UsrGrp> usrGrpList;
UsrGrp.java
@EmbeddedId
protected UsrGrpPK usrGrpPK;
@Column(name = "updated_by")
private String updatedBy;
@Column(name = "updated_date")
@Temporal(TemporalType.TIMESTAMP)
private Date updatedDate;
@JoinColumn(name = "grp_id", referencedColumnName = "grp_id", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Grp grp;
@JoinColumn(name = "usr_id", referencedColumnName = "usr_id", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Usr usr;
Grp.java
@Id
@Basic(optional = false)
@Column(name = "grp_id")
@OneToMany(mappedBy = "grp")
private List<UsrGrp> usrGrpList;
(USR) 1 -------- * (UsrGrp) * -------- 1 (GRP)
Выполнения после sql.
SELECT DISTINCT usr FROM Usr usr LEFT JOIN FETCH usr.usrGrpList
Hibernate фактически выполняет то же количество запроса на выбор, что и числа Grp, которые у меня есть.
select grp0_.grp_id as grp1_6_0_ from grp grp0_ where grp0_.grp_id=?
select grp0_.grp_id as grp1_6_0_ from grp grp0_ where grp0_.grp_id=?
...
Есть ли вообще избежать этого N запросов? Благодарю.
Что вы * на самом деле * пытаетесь сделать ... на английском языке (без кода)? – Bohemian
Я попытался получить список Usr с коллекцией usrGrp. Sql фактически реализует его, но с дополнительным запросом выбора Grp, сгенерированным Hibernate. Скажем, если у меня есть 100 Grp, Hibernate генерирует этот sql-выбор grp0_.grp_id как grp1_6_0_ из grp grp0_, где grp0_.grp_id =? 100 раз. – Claire