使用Spring JPA获取实体属性
我在DAO层中使用SpringJPA。我有一个实体使用Spring JPA获取实体属性,spring,spring-data-jpa,Spring,Spring Data Jpa,我在DAO层中使用SpringJPA。我有一个实体Projet在一个实体属性客户机中有: Project.java @Entity public class Project { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int projetId; private String libelle; @OneToOne(fetch = FetchType.LAZY, cascad
Projet
在一个实体属性客户机中有:
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
}
@Entity
public class Client {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int clientId;
private String denomination;
// ... constructors, getters & setters
}
@Repository
@Transactional
public interface ProjetDao extends CrudRepository<Projet, Integer> {
@Transactional
public Projet findByLibelle(String libelle);
@Transactional
public Projet findByProjetId(int projetId);
}
Client.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
}
@Entity
public class Client {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int clientId;
private String denomination;
// ... constructors, getters & setters
}
@Repository
@Transactional
public interface ProjetDao extends CrudRepository<Projet, Integer> {
@Transactional
public Projet findByLibelle(String libelle);
@Transactional
public Projet findByProjetId(int projetId);
}
在我的DAO接口中,我有以下规范:
ProjetDao.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
}
@Entity
public class Client {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int clientId;
private String denomination;
// ... constructors, getters & setters
}
@Repository
@Transactional
public interface ProjetDao extends CrudRepository<Projet, Integer> {
@Transactional
public Projet findByLibelle(String libelle);
@Transactional
public Projet findByProjetId(int projetId);
}
@存储库
@交易的
公共接口项目DAO扩展了CrudRepository{
@交易的
公共项目findByLibelle(字串诽谤);
@交易的
公共项目findByProjetId(内部项目);
}
我的问题是:如何在我的DAO接口中指定一个方法,该方法将返回列表中所有不同的客户机?和:
List findalldinctby();
Spring数据存储库基础结构中内置的查询生成器机制对于在存储库的实体上构建约束查询非常有用。该机制从方法中剥离前缀find…By、read…By、query…By、count…By和get…By,并开始解析其余部分。引入子句可以包含其他表达式,例如Distinct,以便在要创建的查询上设置Distinct标志。但是,第一个By用作分隔符,指示实际条件的开始。在一个非常基本的级别上,您可以定义实体属性的条件,并将它们与and和Or连接起来
您处理的是一对一的关系,在这种情况下,我想您需要的列表与特定的项目并不相关,您只需要一个独特的客户列表。
您需要为客户端实体创建另一个存储库(ClientRepository),并在此存储库中添加findAllDistinct方法。尝试使用返回列表的方法是,我想返回List@MohamedRedaArherbi我在回答中给你举了一个例子,其中提到了文档,只是作为一个注释,如果您只使用id
作为id属性的名称(例如Spring Data的Identification
接口),那么有一些工具可以更顺利地工作,并且您可以只使用存储库接口上的内置findOne
方法。感谢您的回答,但是我希望所有客户端都是不同的,没有用于选择的参数。findAllDistinct抱歉,这不起作用,它向我显示了错误找不到类型Project的属性findAllDistinct代码>。我在Dao中编写的方法是public List findalldinct()代码>你可以用这种方法添加一个客户端DAO。是的,我知道,但我正在寻找一种方法在表项目上实现它,这就是目标。