簡體   English   中英

為什么要嘗試執行涉及2個表之間的聯接的HQL查詢,而獲得此“ ErrorCounter-期望聯接的路徑!”?

[英]Why I am obtaining this “ErrorCounter - Path expected for join!” trying to perform an HQL query that involves join between 2 tables?

我正在使用Spring Data JPA執行查詢的Spring項目。

所以我有這兩個實體類:

1)代表住宿房間的房間:

@Entity
@Table(name = "room")
public class Room implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @ManyToOne
    @JoinColumn(name = "id_accomodation_fk", nullable = false)
    private Accomodation accomodation;

    @ManyToOne
    @JoinColumn(name = "id_room_tipology_fk", nullable = false)
    private RoomTipology roomTipology;

    @Column(name = "room_number")
    private String number;

    @Column(name = "room_name")
    private String name;

    @Column(name = "room_description")
    @Type(type="text")
    private String description;

    @Column(name = "max_people")
    private Integer maxPeople;

    @Column(name = "is_enabled")
    private Boolean isEnabled;

    // CONSTRUCTOR, GETTER AND SETTER METHODS
}

如您所見,該類包含以下字段:

@ManyToOne
@JoinColumn(name = "id_room_tipology_fk", nullable = false)
private RoomTipology roomTipology;

將許多Room實例鏈接到RoomTipology實例。

2)然后我有RoomTipology實體類:

@Entity
@Table(name = "room_tipology")
public class RoomTipology implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "tipology_name")
    private String name;

    @Column(name = "tipology_description")
    private String description;

    @Column(name = "time_stamp")
    private Date timeStamp;

    @OneToMany(mappedBy = "roomTipology")
    private List<Room> rooms;

    @OneToOne(mappedBy = "roomTipology")
    private RoomRate roomRate;

    // CONSTRUCTOR, GETTER AND SETTER METHODS
}

然后,我有了RoomTipology實體類的存儲庫分類,例如:

在其中,我想實現一個返回與特定房間ID相關的房間拓撲的方法。 所以我想實現此查詢的HQL版本:

SELECT * 
FROM `room_tipology` rt 
INNER JOIN room r
ON rt.id = r.id_room_tipology_fk
WHERE r.id = 7

所以我有這種方式

@Repository
@Transactional(propagation = Propagation.MANDATORY)
public interface RoomTipologyDAO extends JpaRepository<RoomTipology, Long> {

    @Query("from RoomTipology rt JOIN Room r ON rt.id = r.id_room_tipology_fk WHERE r.id = :roomId")
    RoomTipology getInfoByRoomId(Long id);

}

問題是,執行我的申請時會收到以下錯誤消息:

[ERROR] 2016-12-03 11:47:41 [org.hibernate.hql.internal.ast.ErrorCounter.reportError(ErrorCounter.java:73)] [main] ErrorCounter -  Path expected for join!
antlr.SemanticException: Path expected for join!
    at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:385) [hibernate-core-4.3.11.Final.jar:4.3.11.Final]
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.joinElement(HqlSqlBaseWalker.java:3903) [hibernate-core-4.3.11.Final.jar:4.3.11.Final]
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3689) [hibernate-core-4.3.11.Final.jar:4.3.11.Final]
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3567) [hibernate-core-4.3.11.Final.jar:4.3.11.Final]

.....................................................................
.....................................................................
.....................................................................
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [from com.betrivius.domain.RoomTipology rt JOIN Room r ON rt.id = r.id_room_tipology_fk WHERE r.id = :roomId]
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:91) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final]
.....................................................................
.....................................................................
.....................................................................

為什么? 怎么了? 我想念什么? 如何解決此問題?

您不需要JOIN ... ON,因為您已經在映射中定義了關系:

from RoomTipology rt JOIN rt.rooms r WHERE r.id = :roomId

https://docs.oracle.com/javaee/7/tutorial/persistence-querylanguage004.htm#BNBTL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM