[英]Getting org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join for inner join query in java
StringBuilder queryString = new StringBuilder(" FROM Organisation org ")
.append(" INNER JOIN Abonne a ")
.append(" WHERE org.idOrganisation = a.organisation ");
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join!
引起原因:org.hibernate.hql.internal.ast.QuerySyntaxException:预期加入的路径!
I am getting path expected for the INNER JOIN Abonne a WHERE org.idOrganisation = a.organisation order by org.code ] 我正在为INNER JOIN Abonne获得期望的路径,其中org.idOrganisation = org.code的a.organization订单]
Abonne Entity The abonne entity has the organisation foreign key @ Join table id_org Abonne实体Abonne实体具有组织外键@联接表id_org
@Entity
@Table(name = "T_ABONNE")
public class Abonne {
private static final long serialVersionUID = -7500240243978256087L;
@Id
@Column(name = "ID_ABONNE", columnDefinition = "CHAR(32)")
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
private String idAbonne;
@Column(name = "LIB_NOM", length = 200, nullable = false)
private String nom;
@Column(name = "BOO_ACTIF", nullable = false)
private Boolean actif;
@Column(name = "DAT_DATE_EXPIRATION", length = 10)
@Type(type="utcType")
private Date dateExpiration;
@Column(name="NO_MAXIM_DE_UTILISATEURS", length = 5000)
private Integer noMaxUsers;
@ManyToOne
@JoinColumn(name="ID_LANGUAGE", nullable=false)
@Index(name = IndexNameUtil.T_ABONNE_ID_LANGUAGE_IDX)
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
private Language language;
@ManyToOne
@JoinColumn(name="ID_THEME", nullable=false)
@Index(name = IndexNameUtil.T_ABONNE_ID_THEME_IDX)
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
private Theme theme;
@ManyToOne
@JoinColumn(name="ID_FONT", nullable=false)
@Index(name = IndexNameUtil.T_ABONNE_ID_FONT_IDX)
private Font font;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="ID_ORG", nullable=false, updatable=false)
@Index(name = IndexNameUtil.T_ABONNE_ID_ORG_IDX)
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
private Organisation organisation;
}
Organisation Entity This is the organisation Entity which has the idOrganisation 组织实体这是具有idOrganisation的组织实体
@Table(name = "T_ORGANISATION")
public class Organisation {
private static final long serialVersionUID = 5348078630581306005L;
public static final String COLUMN_ID_ORGANISATION = "ID_ORGANISATION";
@Id
@Column(name = COLUMN_ID_ORGANISATION, columnDefinition = "CHAR(32)")
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
private String idOrganisation;
@Column(name = "LIB_NOM", nullable = false, length=250)
private String nomOrganisation;
@Column(name = "LIB_CODE", length=100)
private String code;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="ID_FICHIER")
@Index(name = IndexNameUtil.T_ORGANISATION_ID_FICHIER_IDX)
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
private File logo ;
} }
This one should work:- 这应该工作:
StringBuilder queryString = new StringBuilder(" FROM Abonne a ")
.append(" INNER JOIN a.organisation org ")
.append(" WHERE org.idOrganisation = a.organisation ");
Change your query as follows: 如下更改查询:
StringBuilder queryString = new StringBuilder("select a.organisation FROM Abonne a ")
When you use a.organistion it will create join in hibernate on its own. 当您使用a.organistion时,它将自行在休眠状态下创建连接。
Or 要么
Add List in organistion to have bi directional mapping and use the following query. 在组织中添加列表具有双向映射,并使用以下查询。
@Table(name = "T_ORGANISATION")
public class Organisation {
private static final long serialVersionUID = 5348078630581306005L;
public static final String COLUMN_ID_ORGANISATION = "ID_ORGANISATION";
@Id
@Column(name = COLUMN_ID_ORGANISATION, columnDefinition = "CHAR(32)")
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
private String idOrganisation;
@Column(name = "LIB_NOM", nullable = false, length=250)
private String nomOrganisation;
@Column(name = "LIB_CODE", length=100)
private String code;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="ID_FICHIER")
@Index(name = IndexNameUtil.T_ORGANISATION_ID_FICHIER_IDX)
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
private File logo ;
@OneToMany(mappedBy="organisation")
List<Abonne> abonnes;
StringBuilder queryString = new StringBuilder(" FROM Organisation org ")
.append(" JOIN org.abonnes a ")
.append(" WHERE org.idOrganisation = a.organisation.idOrganisation ");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.