正在获取 org.hibernate.hql.internal.ast.QuerySyntaxException:java 中内部联接查询的联接预期路径
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!
我正在获取 INNER JOIN Abonne a WHERE org.idOrganisation = a.organisation order by org.code]
的预期路径
Abonne 实体
上层实体有组织外键
@加入tableid_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;
}
组织实体
这是具有 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 ;
}
这个应该有效:-
StringBuilder queryString = new StringBuilder(" FROM Abonne a ")
.append(" INNER JOIN a.organisation org ")
.append(" WHERE org.idOrganisation = a.organisation ");
按如下方式更改您的查询:
StringBuilder queryString = new StringBuilder("select a.organisation FROM Abonne a ")
当您使用 a.organistion 时,它会在休眠中自行创建连接。
或者
在组织中添加列表以进行双向映射并使用以下查询。
@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 ");
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!
我正在获取 INNER JOIN Abonne a WHERE org.idOrganisation = a.organisation order by org.code]
的预期路径Abonne 实体 上层实体有组织外键 @加入tableid_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;
}
组织实体 这是具有 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 ;
}
这个应该有效:-
StringBuilder queryString = new StringBuilder(" FROM Abonne a ")
.append(" INNER JOIN a.organisation org ")
.append(" WHERE org.idOrganisation = a.organisation ");
按如下方式更改您的查询:
StringBuilder queryString = new StringBuilder("select a.organisation FROM Abonne a ")
当您使用 a.organistion 时,它会在休眠中自行创建连接。
或者
在组织中添加列表以进行双向映射并使用以下查询。
@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 ");