我有一个包含两个表的数据库:
1)NumberEntity
|------|-------|--------|
| id |numero | volume |
|------|-------|--------|
| 1 | 1 | 1 |
|------|-------|--------|
| 2 | 1 | 2 |
|------|-------|--------|
| 3 | 2 | 1 |
|------|-------|--------|
2)ArticleEntity
|------|-------|------------|
| id |Article| numbers_id |
|------|-------|------------|
| 5 | 7 | 1 |
|------|-------|------------|
| 6 | 5 | 2 |
|------|-------|------------|
| 7 | 6 | 3 |
|------|-------|------------|
其中numbers_id是与第一个表的关系。 我想通过第一个查询提取 表,文章desc命令的文章。 我不知道如何做到这一点,我从这个问题开始:
public List<NumberEntity> findByVolumeAndNumero(String volume, String number);
我得到了文章列表,但第一篇是文章编号7,而不是像第一篇文章那样提取数字5,6和7。
这些是我的模特:
@Entity
public class NumberEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String volume;
private String numero;
@OneToMany(mappedBy="numbers", cascade = CascadeType.ALL, orphanRemoval = true)
private List<ArticleEntity> articles = new ArrayList<ArticleEntity>();
另一个:
@Entity
public class ArticleEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String article;
@ManyToOne
private NumberEntity numbers;
所以我需要像这样的查询(即使它不正确,但它只是伪代码):
public List<NumberEntity> findByVolumeAndNumeroOrderByArticleDesc(String volume, String number);
问题是,我没有理解如何使用Spring将单个查询加入另一个表
答案 0 :(得分:1)
您可以使用查询来执行此操作。请尝试使用此代码。
@Query("SELECT * FROM number n join article a on n.id = a.numbers_id order by a.id ")
答案 1 :(得分:0)
entityManager.createQuery("SELECT ae FROM ArticleEntity ae WHERE ae.numbers.volume = :volume AND ae.numbers.numero = :numero ORDER BY ae.article DESC).setParameter("volume", volume).setParameter("numero", numero)
如果您正在使用会话,您可以将entityManager与它交换。
答案 2 :(得分:0)
首先尝试不创建双向关系,因为当你进行选择时,你将面临一个循环;在你的情况下,从文章到数字创建一个关系ManyToOne就足够了。 查询应如下所示:
@Query("select * from ArticleEntity article inner join article.numbers number where article.numbers.volume=:volume and article.numbers.id=:id")
List<ArticleEntity> findAll(@Param("volume") String volume , @Param("id") long id);
尝试此查询(p.s.检查字段名称与它们在java类(实体)中的相同)
您可以通过article.number.volume添加到查询订单desc之后或者您想要的内容...
另请阅读Criteria。这种编写查询的方式要简单得多,因为有一些方法可以实现很多SQL查询。
答案 3 :(得分:0)
@Query("SELECT a FROM ArticleEntity a, NumberEntity n WHERE ...")