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'来表示。 –