JPA异常::路径预期加入 [英] JPA exception :: path expected for join

查看:75
本文介绍了JPA异常::路径预期加入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

获取QuerySyntaxException:需要加入的路径。
我在实体中定义了路径。

$ p $ @Entity
@Table(name =datapoint_template_condition_action_map_details_map )
@NamedQuery(name =DatapointTemplateConditionActionMapDetailsMap.findAll,query =SELECT d FROM DatapointTemplateConditionActionMapDetailsMap d)
public class DatapointTemplateConditionActionMapDetailsMap implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name =iddatapoint_template_condition_action_map_details_map)
private int iddatapointTemplateConditionActionMapDetailsMap;

@Temporal(TemporalType.TIMESTAMP)
@Column(name =creation_time)
private创建时间;

@Column(name =is_disabled)
private boolean isDisabled;

私有int序列;

@Column(name =user_id)
private int userId;

@Column(name =condition_action_map_details_id)
private int conditionActionMapDetailId;

@Column(name =datapoint_template_id)
private int datapointTemplateId;

@ManyToOne(取= FetchType.EAGER)
@JoinColumn(name = condition_action_map_details_id,插入=假,可更新= FALSE)
私人ConditionActionMapDetail conditionActionMapDetail;

public DatapointTemplateConditionActionMapDetailsMap(){
}

public int getConditionActionMapDetailId(){
return conditionActionMapDetailId;
}

public Date getCreationTime(){
return creationTime;
}

public int getDatapointTemplateId(){
return datapointTemplateId;
}

public int getIddatapointTemplateConditionActionMapDetailsMap(){
return iddatapointTemplateConditionActionMapDetailsMap;
}

public int getSequence(){
return sequence;
}

public int getUserId(){
return userId;
}

public boolean isDisabled(){
return isDisabled;
}

public void setConditionActionMapDetailId(int conditionActionMapDetailId){
this.conditionActionMapDetailId = conditionActionMapDetailId;
}

public void setCreationTime(Date creationTime){
this.creationTime = creationTime;
}

public void setDatapointTemplateId(int datapointTemplateId){
this.datapointTemplateId = datapointTemplateId;
}

public void setDisabled(boolean isDisabled){
this.isDisabled = isDisabled;

$ b public void setIddatapointTemplateConditionActionMapDetailsMap(int iddatapointTemplateConditionActionMapDetailsMap){
this.iddatapointTemplateConditionActionMapDetailsMap = iddatapointTemplateConditionActionMapDetailsMap;
}

public void setSequence(int sequence){
this.sequence = sequence;
}

public void setUserId(int userId){
this.userId = userId;


public ConditionActionMapDetail getConditionActionMapDetail(){
return conditionActionMapDetail;
}

public void setConditionActionMapDetail(ConditionActionMapDetail conditionActionMapDetail){
this.conditionActionMapDetail = conditionActionMapDetail;
}

}

  @Entity 
@Table(名称= condition_action_map_details)
@NamedQuery(名称= ConditionActionMapDetail.findAll,查询= SELECT C来自ConditionActionMapDetail C)
public class ConditionActionMapDetail实现Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name =idcondition_action_map_details)
private int idconditionActionMapDetails;

@Column(name =condition_action_map_description)
private String conditionActionMapDescription;

@Column(name =condition_action_map_name)
private String conditionActionMapName;

@Temporal(TemporalType.TIMESTAMP)
@Column(name =creation_time)
private创建时间;

@Column(name =customer_id)
private int customerId;

@Column(name =user_id)
private int userId;

@Column(name =conditions_id)
private int conditionId;

@OneToMany(mappedBy =conditionActionMapDetail)
private List< ConditionActionMap> conditionActionMaps;
$ b $公共ConditionActionMapDetail(){
}

public String getConditionActionMapDescription(){
return conditionActionMapDescription;
}

public String getConditionActionMapName(){
return conditionActionMapName;
}

public int getConditionId(){
return conditionId;
}

public Date getCreationTime(){
return creationTime;
}

public int getCustomerId(){
return customerId;
}

public int getIdconditionActionMapDetails(){
return idconditionActionMapDetails;
}

public int getUserId(){
return userId;
}

public void setConditionActionMapDescription(String conditionActionMapDescription){
this.conditionActionMapDescription = conditionActionMapDescription;
}

public void setConditionActionMapName(String conditionActionMapName){
this.conditionActionMapName = conditionActionMapName;
}

public void setConditionId(int conditionId){
this.conditionId = conditionId;
}

public void setCreationTime(Date creationTime){
this.creationTime = creationTime;
}

public void setCustomerId(int customerId){
this.customerId = customerId;
}

public void setIdconditionActionMapDetails(int idconditionActionMapDetails){
this.idconditionActionMapDetails = idconditionActionMapDetails;
}

public void setUserId(int userId){
this.userId = userId;
}

public List< ConditionActionMap> getConditionActionMaps(){
return conditionActionMaps;
}

public void setConditionActionMaps(List< ConditionActionMap> conditionActionMaps){
this.conditionActionMaps = conditionActionMaps;
}

}

在我的春季仓库类中,我有

  @Repository 
public interface ActionRepository扩展CrudRepository< Action,Integer> {

列表< Action> findByCustomerId(int customerId);

$ b @Query(选择camd.conditionActionMaps from DatapointTemplateConditionActionMapDetailsMap dtcamdm
+加入ConditionActionMapDetail camd
+on dtcamdm.conditionActionMapDetail = camd.idconditionActionMapDetails
+where dtcamdm.datapointTemplateId =:templateid and camd.conditionId =:conditionid)
List< ConditionActionMap> findConditionActionMapForDatapointTemplateIdandConditionId(@Param(templateid)int templateid,@Param(conditionid)int conditionid);

//列表<动作> findByActionData(String data);
//列表<动作> findByActionTypeId(int typeId);

}



每当我尝试运行我得到以下例外:

 引起:org.hibernate.hql.internal.ast.QuerySyntaxException:加入的路径! [select camd.conditionActionMaps from com.vuelogix.collygo.data.entities.DatapointTemplateCo 
nditionActionMapDetailsMap dtcamdm join ConditionActionMapDetail camd on dtcamdm.conditionActionMapDetail = camd.idconditionActionMapDetails where dtcamdm.datapointTemplateId =:t
emplateid和camd.conditionId =:conditionid]
。在org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:91)
。在org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter。 java:109)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:284)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl。的java:206)在org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158

。在org.hibernate.engine.query.spi.HQLQueryPlan< INIT> (HQLQueryPlan.java:126)
在org.hibernate.engine.query.spi.HQLQueryPlan。< init>(HQLQ org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167)
org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:在org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236 301)

在org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800)
。在组织.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:328)
... 84 more

我已经在@ManytoOne中添加了根据hibernate documentation的路径。我已经搜索了类似的问题,但是无法解决这个问题。

解决方案

更改查询,以

  @Query( 选择从DatapointTemplateConditionActionMapDetailsMap dtcamdm camd.conditionActionMaps 
+ 加入dtcamdm.conditionActionMapDetail凸轮
+其中dtcamdm.datapointTemplat eId =:templateid和camd.conditionId =:conditionid)


Getting QuerySyntaxException :path expected for join. I have defined the path in entities.

@Entity
@Table( name = "datapoint_template_condition_action_map_details_map" )
@NamedQuery( name = "DatapointTemplateConditionActionMapDetailsMap.findAll", query = "SELECT d FROM DatapointTemplateConditionActionMapDetailsMap d" )
public class DatapointTemplateConditionActionMapDetailsMap implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
@Column( name = "iddatapoint_template_condition_action_map_details_map" )
private int iddatapointTemplateConditionActionMapDetailsMap;

@Temporal( TemporalType.TIMESTAMP )
@Column( name = "creation_time" )
private Date creationTime;

@Column( name = "is_disabled" )
private boolean isDisabled;

private int sequence;

@Column( name = "user_id" )
private int userId;

@Column( name = "condition_action_map_details_id" )
private int conditionActionMapDetailId;

@Column( name = "datapoint_template_id" )
private int datapointTemplateId;

@ManyToOne( fetch = FetchType.EAGER)
@JoinColumn( name = "condition_action_map_details_id", insertable = false, updatable = false )
private ConditionActionMapDetail conditionActionMapDetail;

public DatapointTemplateConditionActionMapDetailsMap() {
}

public int getConditionActionMapDetailId() {
    return conditionActionMapDetailId;
}

public Date getCreationTime() {
    return creationTime;
}

public int getDatapointTemplateId() {
    return datapointTemplateId;
}

public int getIddatapointTemplateConditionActionMapDetailsMap() {
    return iddatapointTemplateConditionActionMapDetailsMap;
}

public int getSequence() {
    return sequence;
}

public int getUserId() {
    return userId;
}

public boolean isDisabled() {
    return isDisabled;
}

public void setConditionActionMapDetailId(int conditionActionMapDetailId) {
    this.conditionActionMapDetailId = conditionActionMapDetailId;
}

public void setCreationTime(Date creationTime) {
    this.creationTime = creationTime;
}

public void setDatapointTemplateId(int datapointTemplateId) {
    this.datapointTemplateId = datapointTemplateId;
}

public void setDisabled(boolean isDisabled) {
    this.isDisabled = isDisabled;
}

public void setIddatapointTemplateConditionActionMapDetailsMap(int iddatapointTemplateConditionActionMapDetailsMap) {
    this.iddatapointTemplateConditionActionMapDetailsMap = iddatapointTemplateConditionActionMapDetailsMap;
}

public void setSequence(int sequence) {
    this.sequence = sequence;
}

public void setUserId(int userId) {
    this.userId = userId;
}

public ConditionActionMapDetail getConditionActionMapDetail() {
    return conditionActionMapDetail;
}

public void setConditionActionMapDetail(ConditionActionMapDetail conditionActionMapDetail) {
    this.conditionActionMapDetail = conditionActionMapDetail;
}

}

@Entity
@Table( name = "condition_action_map_details" )
@NamedQuery( name = "ConditionActionMapDetail.findAll", query = "SELECT c FROM ConditionActionMapDetail c" )
public class ConditionActionMapDetail implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
@Column( name = "idcondition_action_map_details" )
private int idconditionActionMapDetails;

@Column( name = "condition_action_map_description" )
private String conditionActionMapDescription;

@Column( name = "condition_action_map_name" )
private String conditionActionMapName;

@Temporal( TemporalType.TIMESTAMP )
@Column( name = "creation_time" )
private Date creationTime;

@Column( name = "customer_id" )
private int customerId;

@Column( name = "user_id" )
private int userId;

@Column( name = "conditions_id" )
private int conditionId;

@OneToMany(mappedBy="conditionActionMapDetail")
private List<ConditionActionMap> conditionActionMaps ;

public ConditionActionMapDetail() {
}

public String getConditionActionMapDescription() {
    return conditionActionMapDescription;
}

public String getConditionActionMapName() {
    return conditionActionMapName;
}

public int getConditionId() {
    return conditionId;
}

public Date getCreationTime() {
    return creationTime;
}

public int getCustomerId() {
    return customerId;
}

public int getIdconditionActionMapDetails() {
    return idconditionActionMapDetails;
}

public int getUserId() {
    return userId;
}

public void setConditionActionMapDescription(String conditionActionMapDescription) {
    this.conditionActionMapDescription = conditionActionMapDescription;
}

public void setConditionActionMapName(String conditionActionMapName) {
    this.conditionActionMapName = conditionActionMapName;
}

public void setConditionId(int conditionId) {
    this.conditionId = conditionId;
}

public void setCreationTime(Date creationTime) {
    this.creationTime = creationTime;
}

public void setCustomerId(int customerId) {
    this.customerId = customerId;
}

public void setIdconditionActionMapDetails(int idconditionActionMapDetails) {
    this.idconditionActionMapDetails = idconditionActionMapDetails;
}

public void setUserId(int userId) {
    this.userId = userId;
}

public List<ConditionActionMap> getConditionActionMaps() {
    return conditionActionMaps;
}

public void setConditionActionMaps(List<ConditionActionMap> conditionActionMaps) {
    this.conditionActionMaps = conditionActionMaps;
}

}

And in my repository class in spring i have

@Repository
public interface ActionRepository extends CrudRepository<Action, Integer> {

List<Action> findByCustomerId(int customerId);


@Query( "select camd.conditionActionMaps from DatapointTemplateConditionActionMapDetailsMap  dtcamdm  "
    + " join ConditionActionMapDetail camd "
    + " on dtcamdm.conditionActionMapDetail=camd.idconditionActionMapDetails "
    + " where dtcamdm.datapointTemplateId=:templateid and camd.conditionId=:conditionid" )
List<ConditionActionMap> findConditionActionMapForDatapointTemplateIdandConditionId(@Param( "templateid" ) int templateid,@Param( "conditionid" ) int conditionid);

// List<Action> findByActionData(String data);
// List<Action> findByActionTypeId(int typeId);

}

Every time i try to run i am getting the following exception

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [select camd.conditionActionMaps from com.vuelogix.collygo.data.entities.DatapointTemplateCo
nditionActionMapDetailsMap  dtcamdm   join ConditionActionMapDetail camd  on dtcamdm.conditionActionMapDetail=camd.idconditionActionMapDetails  where dtcamdm.datapointTemplateId=:t
emplateid and camd.conditionId=:conditionid]
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:91)
    at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:109)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:284)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167)
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:328)
    ... 84 more

I have added the path in @ManytoOne as per the hibernate documentation.I have searched similar issues but couldn't solve this.

解决方案

Change query to

@Query( "select camd.conditionActionMaps from DatapointTemplateConditionActionMapDetailsMap  dtcamdm  "
         + " join dtcamdm.conditionActionMapDetail camd "
         + " where dtcamdm.datapointTemplateId=:templateid and camd.conditionId=:conditionid" )

这篇关于JPA异常::路径预期加入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆