Java JPA:需要多对多查询帮助
我有四个实体涉及到一个查询,我有点麻烦。关系如下:交易所--*合同--*联合体--*交易和简化实体如下:Java JPA:需要多对多查询帮助,java,hibernate,jpa,jpql,Java,Hibernate,Jpa,Jpql,我有四个实体涉及到一个查询,我有点麻烦。关系如下:交易所--*合同--*联合体--*交易和简化实体如下: @Entity public class Exchange implements Serializable { @Id(name="EXCHANGE_ID") private long exchangeId; @Column private String exchangeShortName; } @Entity public class Contract
@Entity
public class Exchange implements Serializable {
@Id(name="EXCHANGE_ID")
private long exchangeId;
@Column
private String exchangeShortName;
}
@Entity
public class Contract implements Serializable {
@Id
private long contractId;
@Column
private String contractName;
@ManyToOne
@JoinColumn(name="EXCHANGE_ID")
private Exchange exchange;
@ManyToMany
@JoinTable(name="CONTRACT_COMBO",
joinColumns = { @JoinColumn(name="CONTRACT_ID") },
inverseJoinColumns = {@JoinColumn(name="COMBO_ID")})
private Set<Combo> combos;
@Column(name = "ACTIVE_FLAG")
private String activeFlag;
}
@Entity
public class Combo implements Serializable {
@Id
@Column(name="COMBO_ID")
private Integer id;
@ManyToMany
@JoinTable(name="CONTRACT_COMBO",
joinColumns = { @JoinColumn(name="COMBO_ID") },
inverseJoinColumns = {@JoinColumn(name="CONTRACT_ID")})
private Set<Contract> legs;
@OneToMany(mappedBy = "combo")
private Set<Trade> trades;
}
@Entity
public class Trade implements Serializable {
@Id
@Column(name="TRADE_ID")
private long tradeId;
@Column(name="REFERENCE")
private String reference;
@ManyToOne
@JoinColumn(name="COMBO_ID")
private Combo combo;
}
我想得到一份特定交易所的所有交易的清单,但我不能很好地与该交易所的会员合作。任何帮助都将不胜感激。没有真正优化,但我认为这应该可以做到:
Long exchangeId = Long.valueOf(5324623L);
List<Trade> trades = em.createQuery("select T from Trade T where T in " +
"(select distinct C from Combo c where c member of " +
"(select e.combos from Exchange e where e.id = :id) " +
")").setParameter("id", exchangeId).getResultList();
试试这个
select distinct t
from Trade t
join t.combo c
join c.legs l
join l.exchange e
where e.exchangeShortName = 'whatever'
差不多了,但我想你错过了合同的链接。