在eclipselink(jpa)中加入表格

时间:2015-03-30 20:03:32

标签: sql jpa eclipselink vaadin jpql

我正在尝试将一个简单的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;
}

这是两张桌子的例子以及我想要的内容:

enter image description here

然后在ComboBox中显示此comptes列表:

compteCombo.addItems(saut.getComptesFromIdBanque(banque.getId_banque()));
compteCombo.setItemCaptionPropertyId("numero");

不幸的是,这并没有在comboBox中显示任何项目。

我希望我会找到一个相关的答案,因为我徒劳地搜索了这个。这对我很有帮助。

感谢。

1 个答案:

答案 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()