【发布时间】:2016-03-11 17:03:03
【问题描述】:
我是 Spring Data JPA 项目的新手,遇到以下问题。
我有这 2 个类来映射 2 个表以及它们之间连接的相关关系。
1) Tgu1002Anagrafeprofilo 映射我的数据库上的 TGU1002_ANAGRAFEPROFILO 表:
/**
* The persistent class for the TGU1002_ANAGRAFEPROFILO database table.
*
*/
@Entity
@Table(name="profdb.TGU1002_ANAGRAFEPROFILO")
@NamedQuery(name="Tgu1002Anagrafeprofilo.findAll", query="SELECT t FROM Tgu1002Anagrafeprofilo t")
public class Tgu1002Anagrafeprofilo implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="COD_PRF")
private String codPrf;
@Column(name="COD_PGM_ULT_MOV")
private String codPgmUltMov;
@Column(name="COD_UTE_ULT_MOV")
private String codUteUltMov;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="DAT_ORA_ULT_MOV")
private Date datOraUltMov;
@Column(name="DES_PRF")
private String desPrf;
//bi-directional many-to-one association to Tgu1001Anagrafeapplicazione
@ManyToOne
@JoinColumn(name="COD_APP")
private Tgu1001Anagrafeapplicazione tgu1001Anagrafeapplicazione;
//bi-directional many-to-one association to Tgu1007Gesutenteprfcontesto
@OneToMany(mappedBy="tgu1002Anagrafeprofilo")
private List<Tgu1007Gesutenteprfcontesto> tgu1007Gesutenteprfcontestos;
//bi-directional many-to-many association to Tgu1003Anagrafefunzione
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="profdb.TGU1008_PROFILOFUNZIONE",
joinColumns=
@JoinColumn(name="COD_PRF", referencedColumnName="COD_PRF"),
inverseJoinColumns=
@JoinColumn(name="COD_FNZ", referencedColumnName="COD_FNZ")
)
//@JoinColumn(name="COD_PRF")
private List<Tgu1003Anagrafefunzione> tgu1003Anagrafefunziones;
public Tgu1002Anagrafeprofilo() {
}
public String getCodPrf() {
return this.codPrf;
}
public void setCodPrf(String codPrf) {
this.codPrf = codPrf;
}
public String getCodPgmUltMov() {
return this.codPgmUltMov;
}
public void setCodPgmUltMov(String codPgmUltMov) {
this.codPgmUltMov = codPgmUltMov;
}
public String getCodUteUltMov() {
return this.codUteUltMov;
}
public void setCodUteUltMov(String codUteUltMov) {
this.codUteUltMov = codUteUltMov;
}
public Date getDatOraUltMov() {
return this.datOraUltMov;
}
public void setDatOraUltMov(Date datOraUltMov) {
this.datOraUltMov = datOraUltMov;
}
public String getDesPrf() {
return this.desPrf;
}
public void setDesPrf(String desPrf) {
this.desPrf = desPrf;
}
public Tgu1001Anagrafeapplicazione getTgu1001Anagrafeapplicazione() {
return this.tgu1001Anagrafeapplicazione;
}
public void setTgu1001Anagrafeapplicazione(Tgu1001Anagrafeapplicazione tgu1001Anagrafeapplicazione) {
this.tgu1001Anagrafeapplicazione = tgu1001Anagrafeapplicazione;
}
public List<Tgu1007Gesutenteprfcontesto> getTgu1007Gesutenteprfcontestos() {
return this.tgu1007Gesutenteprfcontestos;
}
public void setTgu1007Gesutenteprfcontestos(List<Tgu1007Gesutenteprfcontesto> tgu1007Gesutenteprfcontestos) {
this.tgu1007Gesutenteprfcontestos = tgu1007Gesutenteprfcontestos;
}
public Tgu1007Gesutenteprfcontesto addTgu1007Gesutenteprfcontesto(Tgu1007Gesutenteprfcontesto tgu1007Gesutenteprfcontesto) {
getTgu1007Gesutenteprfcontestos().add(tgu1007Gesutenteprfcontesto);
tgu1007Gesutenteprfcontesto.setTgu1002Anagrafeprofilo(this);
return tgu1007Gesutenteprfcontesto;
}
public Tgu1007Gesutenteprfcontesto removeTgu1007Gesutenteprfcontesto(Tgu1007Gesutenteprfcontesto tgu1007Gesutenteprfcontesto) {
getTgu1007Gesutenteprfcontestos().remove(tgu1007Gesutenteprfcontesto);
tgu1007Gesutenteprfcontesto.setTgu1002Anagrafeprofilo(null);
return tgu1007Gesutenteprfcontesto;
}
public List<Tgu1003Anagrafefunzione> getTgu1003Anagrafefunziones() {
return this.tgu1003Anagrafefunziones;
}
public void setTgu1003Anagrafefunziones(List<Tgu1003Anagrafefunzione> tgu1003Anagrafefunziones) {
this.tgu1003Anagrafefunziones = tgu1003Anagrafefunziones;
}
}
2) Tgu1003Anagrafefunzione 类映射数据库上的 TGU1003_ANAGRAFEFUNZIONE 表:
/**
* The persistent class for the TGU1003_ANAGRAFEFUNZIONE database table.
*
*/
@Entity
@Table(name="profdb.TGU1003_ANAGRAFEFUNZIONE")
@NamedQuery(name="Tgu1003Anagrafefunzione.findAll", query="SELECT t FROM Tgu1003Anagrafefunzione t")
public class Tgu1003Anagrafefunzione implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="COD_FNZ")
private String codFnz;
@Column(name="COD_PGM_ULT_MOV")
private String codPgmUltMov;
@Column(name="COD_UTE_ULT_MOV")
private String codUteUltMov;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="DAT_ORA_ULT_MOV")
private Date datOraUltMov;
@Column(name="DES_FNZ")
private String desFnz;
@Column(name="DES_URL_FNZ")
private String desUrlFnz;
//bi-directional many-to-one association to Tgu1004Tipofunzione
@ManyToOne
@JoinColumn(name="COD_TIP_FNZ")
private Tgu1004Tipofunzione tgu1004Tipofunzione;
//bi-directional many-to-many association to Tgu1002Anagrafeprofilo
@ManyToMany(mappedBy="tgu1003Anagrafefunziones")
private List<Tgu1002Anagrafeprofilo> tgu1002Anagrafeprofilos;
public Tgu1003Anagrafefunzione() {
}
public String getCodFnz() {
return this.codFnz;
}
public void setCodFnz(String codFnz) {
this.codFnz = codFnz;
}
public String getCodPgmUltMov() {
return this.codPgmUltMov;
}
public void setCodPgmUltMov(String codPgmUltMov) {
this.codPgmUltMov = codPgmUltMov;
}
public String getCodUteUltMov() {
return this.codUteUltMov;
}
public void setCodUteUltMov(String codUteUltMov) {
this.codUteUltMov = codUteUltMov;
}
public Date getDatOraUltMov() {
return this.datOraUltMov;
}
public void setDatOraUltMov(Date datOraUltMov) {
this.datOraUltMov = datOraUltMov;
}
public String getDesFnz() {
return this.desFnz;
}
public void setDesFnz(String desFnz) {
this.desFnz = desFnz;
}
public String getDesUrlFnz() {
return this.desUrlFnz;
}
public void setDesUrlFnz(String desUrlFnz) {
this.desUrlFnz = desUrlFnz;
}
public Tgu1004Tipofunzione getTgu1004Tipofunzione() {
return this.tgu1004Tipofunzione;
}
public void setTgu1004Tipofunzione(Tgu1004Tipofunzione tgu1004Tipofunzione) {
this.tgu1004Tipofunzione = tgu1004Tipofunzione;
}
public List<Tgu1002Anagrafeprofilo> getTgu1002Anagrafeprofilos() {
return this.tgu1002Anagrafeprofilos;
}
public void setTgu1002Anagrafeprofilos(List<Tgu1002Anagrafeprofilo> tgu1002Anagrafeprofilos) {
this.tgu1002Anagrafeprofilos = tgu1002Anagrafeprofilos;
}
}
正如您在 Tgu1002Anagrafeprofilo 类中所见,定义了一个与 Tgu1003Anagrafefunzione 类的双向多对多关联(在 DB 上的关系模型中它正在传递)到另一个关联表),这个:
//bi-directional many-to-many association to Tgu1003Anagrafefunzione
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="profdb.TGU1008_PROFILOFUNZIONE",
joinColumns=
@JoinColumn(name="COD_PRF", referencedColumnName="COD_PRF"),
inverseJoinColumns=
@JoinColumn(name="COD_FNZ", referencedColumnName="COD_FNZ")
)
//@JoinColumn(name="COD_PRF")
private List<Tgu1003Anagrafefunzione> tgu1003Anagrafefunziones;
所以在这个项目中执行查询是使用所谓的从方法名称创建查询,这里是一个参考:
http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods
所以,我将有一个存储库接口,其中包含类似这样的内容来执行查询(这是在这个项目中找到的另一个存储库类,只是为了展示它是如何完成的):
@RepositoryDefinition(domainClass=Tid022Anagraficarup.class, idClass=Integer.class)
public interface Tid022AnagraficarupRepository extends JpaRepository<Tid022Anagraficarup, Integer> {
public Tid022Anagraficarup findByCodFisRup(@Param("codFisRup") String codFisRup);
}
所以我认为这个存储库基于一个名为 Tid022Anagraficarup 的类,并使用在这个类\表中定义的 codFisRup 参数的值对这个表执行 aqyery。
所以回到与我之前的实体映射类相关的问题,我必须实现一个简单的查询(使用其他存储库中的方法),它执行以下操作:
检索所有Tgu1003Anagrafefunzione对象的列表,这个:
private List<Tgu1003Anagrafefunzione> tgu1003Anagrafefunziones;
具有 codPrf 字段的特定值的 Tgu1002Anagrafeprofilo。
所以我已经实现了基于 Tgu1002Anagrafeprofilo 类的存储库接口,如下所示:
@RepositoryDefinition(domainClass=Tgu1002Anagrafeprofilo.class, idClass=String.class)
public interface Tgu1002AnagrafeprofiloRepository extends JpaRepository<Tgu1002Anagrafeprofilo, String> {
........................................................
........................................................
HERE THE QUERY METHOD DEFINITION
........................................................
........................................................
}
现在我认为我“只能”使用与先前存储库类相同的系统来定义查询方法,但我对如何做到这一点没有太多想法。
我在想,也许我只能通过 Tgu1002Anagrafeprofilo 的 codPrf 值将其作为参数传递,因为 Tgu1003Anagrafefunzione 的列表相关我想要检索的对象似乎被急切地加载,所以当我检索 Tgu1002Anagrafeprofilo 对象时它可能会自动检索。
你能给我一些关于如何使用 Spring Data JPA 实现这个查询的建议吗?
【问题讨论】:
标签: spring spring-data spring-data-jpa