CrudRepository:由多个相关实体查找
Posted
技术标签:
【中文标题】CrudRepository:由多个相关实体查找【英文标题】:CrudRepository: find by multiple related entities 【发布时间】:2014-07-31 13:27:21 【问题描述】:我在 CrudRepository 中设计查询时遇到了一些问题。
我有两个实体,CourseOffering 和 Department(仅显示相关代码):
CourseOffering.java:
public class CourseOffering implements Serializable
private Department department;
@ManyToOne(fetch = FetchType.LAZY, optional = true)
@JoinColumn(name = "DepartmentId", nullable = true)
@JsonProperty
public Department getDepartment()
return this.department;
public void setDepartment(Department department)
this.department = department;
部门.java:
public class Department implements Serializable
private Set<CourseOffering> courses;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "department")
public Set<CourseOffering> getCourses()
return this.courses;
public void setCourses(Set<CourseOffering> courses)
this.courses = courses;
以及相关的 CrudRepository:
CourseOfferingRepository.java:
import java.util.List;
import edu.ucdavis.dss.dw.entities.CourseOffering;
import org.springframework.data.repository.CrudRepository;
public interface CourseOfferingRepository extends CrudRepository<CourseOffering, Long>
CourseOffering getOneByTermIdAndNumberAndDepartmentId(long termId, String number,
long departmentId);
List<CourseOffering> findByDepartmentCode(String deptCode);
//List<CourseOffering> findAllByDepartmentCode(String deptCodes);
List<CourseOffering> findByTermCode(String termCode);
CourseOfferingRepository 中未注释掉的三个函数按预期工作。我正在努力让第四个工作。
我想做的是能够返回部门代码是许多部门代码之一的所有 CourseOfferings。请注意,CourseOffering 表本身仅包含一个 department_id 整数,该整数引用 Department 表中的 ID,其中存储了实际的 deptCode。
如何让被注释掉的 CrudRepository 函数正常工作?或者换一种说法,“List findByDepartmentCode(String deptCode);”的复数形式是如何产生的?
提前感谢您提供的任何建议。
【问题讨论】:
findByDeptCodeIn(Collection<String> deptCodes)
做你想做的事吗?
好的,谢谢!不知道最后的“In”位。
我添加了评论作为答案:)
【参考方案1】:
您需要将注释掉的代码更改为:
List<CourseOffering> findByDeptCodeIn(Collection<String> deptCodes)
查看this 部分文档,了解允许使用哪些其他关键字
【讨论】:
只有Department
类的关系时也可以使用吗? (我的意思是在CourseOffering
类中没有部门属性)。
@PhoneixS 我没试过,但我严重怀疑它会起作用【参考方案2】:
正如 geoand 在 cmets 中指出的那样,答案是:
List<CourseOffering> findByDepartmentCodeIn(List<String> deptCodes);
谢谢geoand!
【讨论】:
以上是关于CrudRepository:由多个相关实体查找的主要内容,如果未能解决你的问题,请参考以下文章
Spring Data CrudRepository 作为方法 Bean
Spring Boot JPA CrudRepository - 实体未附加到persistencecontext
JpaRepository vs CRUDRepository findAll
如何在不使用 CrudRepository 的情况下将 java spring boot 应用程序中定义的实体反映在数据库中
spring boot: spring-data-jpa (Repository/CrudRepository) 数据库操作, @Entity实体类持久化