我在DAO层使用Spring JPA。我在实体属性Projet
内有一个实体Client
:
Project.java
@Entity
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int projetId;
private String libelle;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name="client_id")
private Client client;
// ... constructors, getters & setters
}
Client.java
@Entity
public class Client {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int clientId;
private String denomination;
// ... constructors, getters & setters
}
在我的DAO界面中,我有以下规范:
ProjetDao.java
@Repository
@Transactional
public interface ProjetDao extends CrudRepository<Projet, Integer> {
@Transactional
public Projet findByLibelle(String libelle);
@Transactional
public Projet findByProjetId(int projetId);
}
我的问题是: 如何在我的DAO界面中指定一个方法,该方法将返回List<Client>
中所有不同的客户端?
答案 0 :(得分:1)
List<Project> findAllDistinctBy();
Spring Data存储库基础结构中内置的查询构建器机制对于构建对存储库实体的约束查询非常有用。该机制剥离前缀find ... By,read ... By,query ... By,count ... By,and get ...来自该方法并开始解析其余部分。 introduction子句可以包含其他表达式,例如Distinct,用于在要创建的查询上设置不同的标志。但是,第一个By用作分隔符以指示实际条件的开始。在非常基础的层面上,您可以在实体属性上定义条件,并使用And和Or连接它们。
答案 1 :(得分:0)
您正在处理一对一的关系,在这种情况下,我猜您需要的列表与特定项目并不真正相关,您只需要一个独特的客户列表。 您需要为Client实体创建另一个存储库(ClientRepository),并在此存储库中添加findAllDistinct方法。