2

これは、関連するバックエンドの指定されたレベル内のモジュール エンティティを取得するメソッドです。

public List<Module> getModulesWithinLevel(Long backendId, ModuleLevel... levels) {
        String joinedLevels = serializeLevels(levels);
        Query query = entityManager.createNativeQuery("SELECT DISTINCT M.* FROM MODULES M JOIN ROUTING_SEQUENCES RS ON RS.BCK_ID = M.MOD_ID WHERE M.MOD_LEVEL IN (?) AND RS.BCK_ID = ?", Module.class);
        query.setParameter(1, joinedLevels);
        query.setParameter(2, backendId);
        List l = query.getResultList();
        return l;
    }

SQL開発者で正確なクエリを実行すると、結果として1行が得られます。しかし、このメソッドは空のリストを返します。ログにエラーはありません - リストが空です。ネイティブ クエリの何が問題になっていますか?

4

2 に答える 2

0

元の質問に対する答えは見つかりましたが、複合キーを使用してROUTING_SEQUENCESテーブルのエンティティを実装することで少し回避策を実行しました。これはうまく機能します:

Query query = entityManager.createQuery("SELECT m FROM Module m WHERE m.id IN (SELECT rs.id.moduleId FROM RoutingSequence rs WHERE rs.id.backendId = :backendId) AND m.level IN (:levels)", Module.class);
query.setParameter("backendId", backendId);
query.setParameter("levels", Arrays.asList(levels));
return query.getResultList();

実在物:

@Entity
@Table(name = "ROUTING_SEQUENCES")
public class RoutingSequence extends AbstractEntity<RoutingSequencePK> implements Auditable {

    @EmbeddedId
    private RoutingSequencePK id;

    @Column(name = "RS_MANDATORY", nullable = false)
    private Boolean mandatory;

    @Column(name = "RS_ORDER")
    private int order;

    @Column(name = "RS_INSDTTM")
    private Date insertDate;

    @Column(name = "RS_UPDDTTM")
    private Date updateDate;
...
}

Id

@Embeddable
public class RoutingSequencePK implements Serializable {

    @Column(name = "BCK_ID")
    private Long backendId;

    @Column(name = "MOD_ID")
    private Long moduleId;
于 2013-03-08T15:42:38.950 に答える
0

を残しましたか? 間違ってそこに?

試す...

Query query = entityManager.createNativeQuery("SELECT DISTINCT M.* FROM MODULES M JOIN ROUTING_SEQUENCES RS ON RS.BCK_ID = M.MOD_ID WHERE M.MOD_LEVEL IN (:1) AND RS.BCK_ID = :2", Module.class);
于 2013-03-08T13:19:21.057 に答える