我试图将一个简单的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(){

    }
}

============================ 实体计算 ==================== =====

@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(实体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中没有显示任何项目。

我希望我徒劳地寻找这个问题时会找到一个相关的答案。 这对我有很大帮助。

谢谢。

#1楼 票数:0

您的JPA查询对我来说似乎很好(尽管@Davids提到,可以将其简化为SELECT c FROM Compte c WHERE c.banque.id_banque = :id_banque )。

我的猜测是您的ComboBox标题未正确设置以显示任何内容。

首先,编写一个测试以确保您的JPA函数返回正确的数据。 然后使用ComboBoxsetItemCaptionMode进行操作以获得正确的设置。 假设您的Compete类具有getNumero()方法,则可以像这样设置组合框:

compteCombo = new ComboBox( "Caption", saut.getComptesFromIdBanque(banque.getId_banque()) );
compteCombo.setItemCaptionMode( ItemCaptionMode.PROPERTY );
compteCombo.setItemCaptionPropertyId( "numero" );

  ask by Amine translate from so

未解决问题?本站智能推荐:

1回复

EclipseLink的COLUMN和TABLE函数是否独立于DBMS?

如果您阅读此EclipseLink的《 用户/开发人员指南》 ,则不会提及TABLE和COLUMN函数是否独立于数据库,并且我不确定是否应该使用它们,因为我正在使用某些oracle,postgres和sqlserver数据库。 题 这些功能DBMS是否独立?
3回复

来自Java对象的JPA查询

如何使用jpa查询对象(而非实体)? 例如下面的简单代码: 背后的原因:查询是动态创建和执行的,但是jpql查询的from子句中的对象不一定是映射表。 在某些情况下,只有一个对象,因此实际需要的行为是在程序执行期间修改查询以符合条件,但是我不知道如何修改查询。 编辑:由于代码的可移
1回复

JPA/JPQL返回不完整的结果,其中xyISNULL或xyz=1

我有以下SQL返回13个结果 SELECT *FROM AAA aJOIN BBB b ON b.id = a.b_idLEFT JOIN CCC c ON c.id = b.c_idLEFT JOIN DDD d ON d.id = c.d_idWHERE b.c_id IS NULLOR d
1回复

使用JPA和EclipseLink的MSSQLServer全文搜索

MSSQL 2008 EclipseLink 2.3.0 JPA 2.0 我正在尝试进行JPQL查询以使用MSSQL的全文本搜索功能。 我们知道FUNC上瘾的EclipseLink函数不起作用[1],因为它期望返回值,而MSSQL freetext [2]实际上不是函数,而是一些看起来像
1回复

EclipseLink-JPQL通过查询联接表

我的JPQl有问题。 这与TrainRoute和TrainRouteStation是一对多的关系。 我正在尝试创建一个内部联接并获取数据。 当我使用mysql workbeanch并尝试将其转换为JPQL时,本机SQL查询正常工作。 另外,我试图从2天开始修复。 错误:对象比较只能与
2回复

在eclipselink中的OneToOne联接中未返回主键

在同一个类中的OneToOne关系的情况下,我有一个连接提取的问题。 示例如下:class Data { ... @Id @Column(name = "DATA_ID") Long id; @Column(name = "DATA_OWNER_ID") @ForeignKey(entityClas
1回复

JPQL/HQL提取联接语法以与EclipseLink和Hibernate兼容

我希望能够通过简单的属性更改在EclipseLink和Hibernate之间交换我的JPA实现。 我可以这样做,但是导致我出现问题的是命名查询验证。 使用EclipseLink,我必须这样编写访存联接: 但是当使用Hibernate验证此查询时,出现以下异常: 因此,我可以将查询更改
1回复

JPA:在具有JPQL、eclipselink和加入继承的多态实体中选择使用多个向下转换

我有一个有趣的练习,试图在使用 eclipselink 2.7.6 时使用单个 JPQL 查询选择多个派生实体。 多态是使用联合继承实现的。 实体图和java类如下:@Entity @Table(name="MAIN_ENTITY")public c