我正在尝试将一个简单的sql语句转换为jpql但是徒劳无功。我有一个实体“Banque”,有许多“Compte”,我试图使用id_Banque为特定的“Banque”获得所有“Compte”。
这是sql语句:
SELECT COMPTE.* FROM COMPTE INNER JOIN BANQUE ON COMPTE.ID_BANQUE=BANQUE.ID_BANQUE;
============================ 实体银行 ========== ===============
@Entity
@Table(name="BANQUE")
public class Banque implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="banque_seq_gen")
@SequenceGenerator(name="banque_seq_gen", sequenceName="BANQUE_SEQ", allocationSize = 1, initialValue = 1)
private Long id_banque;
@OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY, mappedBy = "Banque")
private Set<Compte> comptes;
public Banque(){
}
}
============================ 实体Compte ========== ===============
@Entity
@Table(name="COMPTE")
public class Compte implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="compte_seq_gen")
@SequenceGenerator(name="compte_seq_gen", sequenceName="COMPTE_SEQ", allocationSize = 1, initialValue = 1)
private Long id_compte;
@ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinColumn(name = "ID_BANQUE")
private Banque Banque;
public Compte(){
}
}
以下方法帮助我获得与特定Banque相关的所有comptes(Entity compte)(来自id_banque):
public Set<Compte> getComptesFromIdBanque(Long id_banque){
EntityManager em=new JPAContainerFactory().createEntityManagerForPersistenceUnit("addressbook");
Query query = em.createQuery("SELECT c FROM Compte c INNER JOIN c.Banque b WHERE b.id_banque = :id_banque");
query.setParameter("id_banque", id_banque);
Set<Compte> comptes = new HashSet<>(query.getResultList());
return comptes;
}
这是两张桌子的例子以及我想要的内容:
然后在ComboBox中显示此comptes列表:
compteCombo.addItems(saut.getComptesFromIdBanque(banque.getId_banque()));
compteCombo.setItemCaptionPropertyId("numero");
不幸的是,这并没有在comboBox中显示任何项目。
我希望我会找到一个相关的答案,因为我徒劳地搜索了这个。这对我很有帮助。
感谢。
答案 0 :(得分:0)
您的JPA查询似乎对我很好(尽管@Davids提到它可以简化为SELECT c FROM Compte c WHERE c.banque.id_banque = :id_banque
)。
我的猜测是你的ComboBox caption未正确设置以显示任何内容。
首先,编写测试以确保JPA函数返回正确的数据。然后使用setItemCaptionMode
的{{1}}进行游戏,以获得正确的设置。假设您的ComboBox
课程有Compete
方法,您可以设置您的Combobox:
getNumero()