0

動的クエリを作成するために条件ビルダーに実装する必要がある次の状況 SQL があります。

select t1.ticketnr 
from tbl_ticket t1 
left join tbl_tickets_updates t2 on t1.ticketnr = t2.ticketnr 
where t1.description ilike '%EXAMPLE%' or t2.description ilike '%EXAMPLE%';

私のコードには次のものがあります。

tbl_ticket = Tickets.class PK = ticketnr

tbl_tickets_updates = TicketsUpdates.class および TicketsUpdatesPK.class PK = ticketnr、updatedby、timeofupdate

        CriteriaBuilder builder = em.getCriteriaBuilder();
        CriteriaQuery<Tickets> query = builder.createQuery(Tickets.class);
        EntityType<Tickets> type = em.getMetamodel().entity(Tickets.class);
        Root<Tickets> root = query.from(Tickets.class);
        List<Predicate> predicatesAnd = new ArrayList<Predicate>();
...
    if (text.length() != 0) {
                    predicatesAnd.add(builder.or(
                            builder.like(
                            builder.lower(
                            root.get(
                            type.getDeclaredSingularAttribute("description", String.class))), "%" + text.toLowerCase() + "%"),
                            builder.like(
                            builder.lower(
                            root.get(
                            type.getDeclaredSingularAttribute("summary", String.class))), "%" + text.toLowerCase() + "%")));
                    Join<Tickets, TicketsUpdates> tupdates = root.join("ticketnr", JoinType.LEFT);
                    predicatesAnd.add(builder.like(builder.lower(tupdates.get("description").as(String.class)), "%" + text.toLowerCase() + "%"));
                }

左結合でコードが失敗しています: java.lang.IllegalStateException: CAN_NOT_JOIN_TO_BASIC

これは、複合 PK 用に別のクラスがあるために発生していると思いますが、これを適切に実装する方法を今のところ見つけていません。

何か案は?

4

1 に答える 1