簡體   English   中英

JPQL 多對多選擇查詢

[英]JPQL many to many select query

我有兩個實體類和存儲庫如下所示。 我正在制作 jpql 選擇查詢。

訂閱.java

@Entity
@Table(name="Subscription")
public class Subscription implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="SubscriptionId", nullable=false)
    private Integer subscriptionId;

    @Column(name="BaseProductId", nullable=false)
    private Integer baseProductId;

    @ManyToMany(fetch = FetchType.LAZY, mappedBy="subscription")
    private List<Abc> abc;
}

驅動程序

@Entity
@Table(name="abc")
public class Abc implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="SubscriptionId", nullable=false)
    private Integer id;

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinColumn(name="id", referencedColumnName="BaseProductId", insertable = false, updatable = false, nullable = false)
    private List<Subscription> subscription;
}

AbcRepository.java

@Repository
public interface AbcRepository extends JpaRepository<Abc, Integer> {

    @Query(value="SELECT bpp FROM Abc bpp JOIN bpp.subscription s WHERE s.subscriptionId = ?1")
        public List<Abc> findBppm(Integer a);
    }
}

選擇查詢生成:

select ... from abc bp_inner join abc_subscription ...inner join Subscription subscripti2_ on ... where subscripti2_.SubscriptionId=?

... :- 它在這個地方有東西。

雖然我加入了 abc 和訂閱,但在查詢 hibernate 中創建了一個由 _ 分隔的實體。 即 abc_subscription。

知道我做錯了什么嗎? 提前致謝。

@ManyToMany應該用於實體之間存在鏈接表的場景。

如果未指定@JoinTable ,則持久性提供程序使用的默認鏈接表將是由“_”分隔的兩個實體的串聯。 最重要的是,f 未指定鏈接表中假定的列名稱將是實體類上定義的@Id字段名稱。

嘗試遵循規范並相應地調整您的情況: ManyToMany javadoc

通常,避免對多對多關系使用列表,因為這會在從任一實體中刪除字段時導致問題。 而是使用 Sets private Set<> abc = new HashSet<>();

暫無
暫無

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

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