【问题标题】:JPA/EclipseLink Inherited subtypes in collection operations?JPA/EclipseLink 在集合操作中继承子类型?
【发布时间】:2014-11-26 20:47:51
【问题描述】:

继承的子类型似乎会破坏集合查询,这是:

SELECT o FROM Job AS o WHERE o.occupation = :occupation AND o NOT IN :jobs

恐惧而死

org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of Campaign use setObject ...

当 :jobs 集合包含一个 Campaign,它是 Job 的子类。

这是预期的结果还是错误?

【问题讨论】:

    标签: jpa eclipselink jpa-2.0


    【解决方案1】:

    这是意料之中的。问题是当 JPA 仅支持值集合时,您正在传递实体集合。尝试使用 "从工作中选择 o o WHERE o.occupation = :occupation AND o.id NOT IN :jobs_id"

    其中jobs_id 是主键值的集合。

    【讨论】:

    • 有趣的是,EclipseLink 文档说没关系 [wiki.eclipse.org/EclipseLink/Development/JPA_2.0/…,除了这个集合包含多种类型的情况之外,它运行良好。
    • EclipseLink 文档仅显示了一个字段比较示例(e.id in :param),而 JPA 2.0 规范第 4.6.9 节规定:“state_field_path_expression 必须具有字符串、数字、日期、时间、时间戳或枚举值。”。它不允许实体比较,因为它不适用于所有数据库上的所有实体或映射类型。我不确定您使用的是哪个版本的 EclipseLink - 它可能适用于以后的版本,但由于规范不支持它并且不适用于所有类型,您最好修复您的查询。
    猜你喜欢
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多