【发布时间】:2016-03-01 17:47:36
【问题描述】:
我需要在 JPA 查询中加入一个表和一个视图。由于无法识别视图列,因此无法编译查询。
非常感谢任何建议。
更新了父实体和一致的命名
查询是:
select count(m.id)
from MultiSpeedMotor m,
MultiSpeedQuery q1
where m.id = q1.motorId
and q1.power = 10
错误是:
The state field path 'q1.motorId' cannot be resolved to a valid type.
The state field path 'q1.power' cannot be resolved to a valid type.
我正在使用具有与此类似的非规范化表的旧数据库
Long motorId
Long id
Double hi_power
Double lo_power
我使用了一个带有联合查询的视图来将此表规范化为
Long motorId
Long id
Long hi
Double power
为了在 JPA 中对联合查询的视图进行建模,我使用了 @IdClass
public class MultiSpeedQueryId implements Serializable {
private static final long serialVersionUID = -7996931190943239257L;
private Long motorId;
private Long id;
private Long hi;
...
}
@Entity
@Table(name = "multi_speed_query")
@IdClass(MultiSpeedQueryId.class)
public class MultiSpeedQuery implements IMultiSpeedQuery {
@Id
@Column(name = "motor_id")
private Long motorId;
@Id
private Long id;
@Id
private Long hi;
private Double power;
...
}
父实体映射为:
@Entity
@Table(name = "multi_speed_motor")
public class MultiSpeedMotor implements Serializable, IMultiSpeedMotor {
private static final long serialVersionUID = 3019928176257499187L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
...
}
【问题讨论】:
-
我不确定,但可能以下方法有效:
... WHERE q1.motor = m ...并将MultiSpeedQuery.motorId替换为实际的MultiSpeedMotor motor。 -
我不确定您的建议。 q1 和 m 是标准 JPA 别名。
-
根据您的表def,虽然有 parentId 列,但没有motorId ..这实际上存在于数据库中吗?如果是这样,两个表的实际表定义会很有帮助
-
我更新了原帖,在解释中使用了实际的字段名motorId,而不是parentId。我在解释中最初使用了 parentId 以更好地表明角色。
标签: jpa