首页 文章

为什么JPA选择查询执行会返回带有“canot execute query”消息的异常?

提问于
浏览
0

数据库中的表(Oracle 11g)是这样的:

名称:LOG_ALIM_MAIL

列:ID_LOG RAW(由触发器中的SYS_GUID()自动生成),ALIMENTATION Number(9),DATE_LOG Date

PK:ID_LOG

FK:ALIMENTATION参考ALIMENTATION.ID_ALIMENTATION(Number(9))

LOG_ALIM_MAIL类:

@Entity
public class LogAlimMail implements Serializable {

private static final long serialVersionUID = 2243374060845658640L;

@Id
private Long idLog;

private Date dateLog;

private Alimentation alimentation;

public LogAlimMail() {

}

public Long getIdLog() {
    return idLog;
}

public void setIdLog(Long idLog) {
    this.idLog = idLog;
}

public Date getDateLog() {
    return dateLog;
}

public void setDateLog(Date dateLog) {
    this.dateLog = dateLog;
}

@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
public Alimentation getAlimentation() {
    return alimentation;
}

public void setAlimentation(Alimentation alimentation) {
    this.alimentation = alimentation;
}
}

营养类:@Entity public class Alimentation实现Serializable {

private static final long serialVersionUID = 5790314265385194058L;

private Long idAlimentation;

private Integer etat;

public Alimentation() {

}

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "my_alimentation_seq_gen")
@SequenceGenerator(name = "my_alimentation_seq_gen", sequenceName = "SEQ_ID_ALIMENTATION")
public Long getIdAlimentation() {
    return idAlimentation;
}

public Integer getEtat() {
    return etat;
}

public void setEtat(Integer etat) {
    this.etat = etat;
}

public void setIdAlimentation(Long idAlimentation) {
    this.idAlimentation = idAlimentation;
}
}

我有两个问题:

  • 我正在尝试执行以下选择查询:
public List<LogAlimMail> getAllByIdAlim(Long idAlim) {
String request = "select a from LogAlimMail a where a.alimentation.idAlimentation = " + idAlim;

Query query = this.getEntityManager().createQuery(request);

return query.getResultList();
}

我得到了例外:

java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: idAlimentation of: administration.LogAlimMail [select a from administration.LogAlimMail a where a.alimentation.idAlimentation = 1]
  • 我无法在idLog(Long)和ID_LOG(由SYS_GUID()生成的RAW)之间进行正确的JPA映射 .

谢谢

1 回答

  • 0

    idAlim是一个数字吗?如果没有,你应该使用idAlimentation ='“idAlim”'“;或者更好,使用绑定变量:

    idAlimentation =:idAlim“; query.setString(”idAlim“,idAlim);

相关问题