簡體   English   中英

JPA 查詢一個實體中有多個實體的多對一?

[英]JPA Query for ManyToOne with multiple entities in one entity?

我有某種場景。 假設我正在制作一個關於游戲的數據庫。 首先,我有三個實體: CompanyPlatformGame

Company是這樣的:

 @Data @Entity @Table(name = "company") public class Company implements Serializable { @Id @Basic(optional = false) @GeneratedValue(strategy = GenerationType.AUTO, generator = "MA_COMPANY_ID_S") @SequenceGenerator(name = "MA_COMPANY_ID_S", allocationSize = 1, sequenceName = "MA_COMPANY_ID_S") @Column(name = "ID") private Long id; @Column(name = "COMPANY_NAME") private String companyName; }

Platform是這樣的

@Data @Entity @Table(name = "platform") public class Platform { @Id @Basic(optional = false) @GeneratedValue(strategy = GenerationType.AUTO, generator = "MA_PLATFORM_ID_S") @SequenceGenerator(name = "MA_PLATFORM_ID_S", allocationSize = 1, sequenceName = "MA_PLATFORM_ID_S") @Column(name = "ID") private Long id; @Column(name = "PLATFORM_NAME") private String platformName; }

最后, Game是這樣的

@Data @Entity @Table(name = "game") public class Game { @Id @Basic(optional = false) @GeneratedValue(strategy = GenerationType.AUTO, generator = "MA_GAME_ID_S") @SequenceGenerator(name = "MA_GAME_ID_S", allocationSize = 1, sequenceName = "MA_GAME_ID_S") @Column(name = "ID") private Long id; @Column(name = "GAME_NAME") private String gameName; @Column(name="TEST") private String testName; @ManyToOne @JoinColumn(name="COMPANY_ID", foreignKey=@ForeignKey(name="FK_COMPANY_ID")) private Company company; @ManyToOne @JoinColumn(name="PLATFORM_ID", foreignKey=@ForeignKey(name="FK_PLATFORM_ID")) private Platform platform; }

如你所見,一個游戲必須有兩個外鍵鏈接到一個公司和一個平台,例如,一個游戲由一個公司制作,然后放在一個平台上(稍后拋開多平台的概念)

我使用存儲庫文件將它與我的數據庫連接起來。 我將僅列出GameRepository示例,因為這就是問題所在

@Repository public interface GameRepository extends JpaRepository<Game, Long> { @Query("SELECT id, gameName, company, platform FROM Game g WHERE g.id =:id") public Game findGameById(@Param("id") String id); }

如果我運行我的程序,則會收到此錯誤:

 org.hibernate.QueryException: No data type for node: org.hibernate.hql.internal.ast.tree.IdentNode \-[IDENT] IdentNode: 'platform' {originalText=platform}

但是,如果我在查詢中只堅持使用一個@ManyToOne變量,例如我刪除了companyplatform (例如: "SELECT id, gameName, company FROM Game g WHERE g.id =:id" ,則查詢作品。

我在哪里 go 錯了,是否可以有多個@ManyToOne關系引用一個實體中的多個實體並使其運行? 還是我應該堅持使用@ManyToMany 如果是這樣,怎么做?

謝謝

正如布魯諾阿爾維斯評論的那樣,這個問題有兩種解決方案

  1. 嘗試將方法命名為 getById (long id) ,以便 Spring Data 為您生成所需的查詢。 此解決方案不需要查詢注釋
  2. 也許您的 HQL 請求是錯誤的? 從游戲 g 中嘗試 select g 其中 g.id =:id

ManyToOne/ManyToMany 對您的請求無關緊要

暫無
暫無

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

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