簡體   English   中英

多對多的 JPQL 查詢

[英]JPQL query for many to many

我想編寫 JPQL 查詢來獲取具有多對多表的 id 值的行。 我有兩個班級:

@Entity
@Table(name = "farm")
@Getter
public class Farm {

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

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

    @ManyToOne()
    @NotFound(action = NotFoundAction.IGNORE)
    @JoinColumn(name = "customer_id", referencedColumnName = "id")
    private Customer customer;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "user_farm", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "farm_id"))
    private List<User> users = new ArrayList<>();
}

@Entity
@Table(name = "user")
@Getter
public class User {

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

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

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

    @ManyToMany(mappedBy = "users")
    private List<Farm> farms = new ArrayList<>();

    @Column(name = "is_admin")
    private Boolean isAdmin;
}

和一個存儲庫:

public interface FarmRepository extends JpaRepository<Farm, Long> {

    @Query("select f from Farm f join f.users u where u.id=:userId")
    List<Farm> findByUserId(@Param("userId") Long userId);
}

但是,我收到此休眠錯誤:

ERROR: column user2_.id does not exist

如何正確編寫 jpql 查詢以使其正常工作?

該錯誤提示查詢已執行,但您的數據庫表不包含 id 列。

  1. 轉到您的 application.properties 文件並添加以下內容以在您的控制台中查看 SQL:

    spring.jpa.show-sql=true

    spring.jpa.properties.hibernate.format_sql=true

  2. 執行您的測試並查看是否生成了正確的 SQL。

  3. 想想誰創建了您的數據庫? 自動創建 hbm2ddl 模式? 液鹼? 飛道? 模式.sql? 修復您的數據庫表。

我想我也可能有類似的問題。 表名“user”經常被保留,你不能使用它。 嘗試將其重命名為“person”或其他名稱。 可能會有所幫助。

https://stackoverflow.com/a/30157994/9890613

據我所知, @ManyToMany需要雙向關系,但在你的例子中它是單一的。 讓我們看看結構:

User:
Long id;
Farm:
Long id;
User_farm:
Long r_user_id;
Long r_farm_id;

那么@JoinTable必須是:

  @ManyToMany(cascade = CascadeType.ALL)
  @JoinTable(
      name = "USER_FARM",
      joinColumns = @JoinColumn(name = "r_user_id", referencedColumnName = "id"),
      inverseJoinColumns = @JoinColumn(name = "r_farm_id", referencedColumnName = "id"))
  private List<User> users;

暫無
暫無

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

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