有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate HQL映射查询

我有一门课:

@Entity
@Table(name = "days")
public class DayEntry {

@Expose
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
.
.
@Expose
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "day_item_hours")
@MapKeyJoinColumn(name = "item_id")
@Column(name = "hours")
private Map<Item, Double> itemsHours;
.
.
}

我需要从数据库中获取所有DayEntries,其中包含itemHours字段中的特定项目

我试过:

private final String FIND_BY_ACTIVITY = "from DayEntry d where :activity in index(d.itemsHours)";
@Override
public Collection<DayEntry> findByActivity(Item activity) {
    Query query = entityManager.createQuery(FIND_BY_ACTIVITY);
    query.setParameter("activity", activity);
    return query.getResultList();
}

得到这个:

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ( near line 1, column 75 [from ua.siemens.dbtool.model.timesheet.DayEntry d where :activity in index(d.itemsHours)]] with root cause
 org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ( near line 1, column 75 [from ua.siemens.dbtool.model.timesheet.DayEntry d where :activity in index(d.itemsHours)]

不知道该怎么处理。 谢谢

更新

目前,我使用的是纯SQL查询:

    private final String FIND_BY_ACTIVITY = "SELECT * FROM days where id = (SELECT DayEntry_id from day_item_hours where day_item_hours.item_id = :activityId)";

@Override
public Collection<DayEntry> findByActivity(Item activity) {
    Query query = entityManager.createNativeQuery(FIND_BY_ACTIVITY_ID, DayEntry.class);
    query.setParameter("activityId", activity.getId());
    return query.getResultList();
}

但我仍然想知道如何使用HQL实现它


共 (0) 个答案