使用Spring数据进行动态查询时遇到的问题

时间:2018-09-23 12:28:33

标签: java spring-data-jpa spring-data

我需要创建一个动态查询,该查询在两个表之间具有一个关系(OneToMany)。 这是我的资料库:

  

公共接口CommandeRtRepository扩展了JpaRepository,JpaSpecificationExecutor {   }

这是我对findAll()函数的实现:

public List<Commande> getDetailCommandeByCodeCommande(Long codeCommande,String codeFournisseur, String codePN) {
    return  commandRep.findAll(new Specification<Commande>() {
        @Override
        public Predicate toPredicate(Root<Commande> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {

            List<Predicate> predicates = new ArrayList<>();
            root.join("supplier",JoinType.INNER);
            root.join("TTDPUR041204",JoinType.INNER);
            predicates.add(criteriaBuilder.equal(root.get("orno"), codeCommande));
            Join<Commande, Supplier> comm_supp =null;
            Join<Commande,TTDPUR041204> comm_tt =null;
            if(codeFournisseur!=null && !codeFournisseur.equals("")) {
                comm_supp = root.join("supplier",JoinType.INNER);
                predicates.add(criteriaBuilder.like(comm_supp.get("suno"),codeFournisseur+""));
            }
            if(codePN!=null && !codePN.equals("")) {
                comm_tt= root.join("TTDPUR041204",JoinType.INNER);
                predicates.add(criteriaBuilder.like(comm_tt.get("item"),codePN));
            }
            return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
        }
    });
}

这是我的实体:

@Entity
@Table(name="TTCCOM020204")
public class Supplier {
@Id
@Column(name="t$suno")
private String suno;

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

@Column(name="t$nama")
private String nama;

@Column(name="t$namc")
private String namc;

@Column(name="t$namf")
private String namf;
//setter & getters
}

    @Entity
@Table(name="TTDPUR040204")
public class Commande {

@Id
@Column(name="t$orno",unique=false)
private Long orno;

@Column(name="t$refa")
private String refa;

@Column(name="t$suno")
private String suno;

@OneToOne
@JoinColumn(name="t$suno",insertable=false, updatable=false)
private Supplier supplier;

@OneToOne
@JoinColumn(name="t$orno",insertable=false, updatable=false)
private TTDPUR041204 TTDPUR041204;
//setter && getter }

    @Entity
@Table(name="TTDPUR041204")
public class TTDPUR041204 {

@Id
@Column(name="t$orno",unique=false)
private Long orno;
@Column(name="t$item")
private String item;
// Setter && getter}

在我的数据库中,我有两个行的列名(orno)的值与Commande类中的@ID相同。 这就是我数据库中的内容:

----------------------------------------
| t$orno| t$refa         | t$sono      |
|-------|----------------|-------------|
|    1  |  referent 1    |    3        |
|-------|----------------|-------------|
|    1  | referent 2     |    4        |

我的问题是:我的实现是否正确?如果是这样,为什么我要两次获得第一行而不是拖车行?

0 个答案:

没有答案