2
我有兩個實體類和存儲庫看起來像下面。我正在做jpql select查詢。JPQL多對多選擇查詢
Subscription.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;
}
Abc.java
@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查詢生成:
選擇......從ABC BP_內部聯接abc_subscription ... ...上哪裏subscripti2_.SubscriptionId =內加入認購subscripti2_?
...: - 它在這個地方有東西。
雖然我是加入abc和訂閱,但在查詢hibernate創建一個由_分隔的實體。即abc_subscription。
任何想法我做錯了什麼?提前致謝。
我不明白,這有什麼錯此查詢?你期望別的嗎?你只是在煩擾這些名字嗎? –
我希望查詢:select ... from abc bp_ inner join訂閱subscripti2_ on ...其中subscripti2_.SubscriptionId =? – Akkave
你爲什麼期望它是這樣的?您正在使用'ManyToMany'關係,因此默認情況下它將使用連接表'Abc_subscription'來表示。 –