问题描述
我有两个名称相同的实体类,但是它们在不同的程序包中,并且具有不同的ID。
package sample.visa;
@Entity
@Table(name="APP_VISA")
public class Application
{
@Id
private Integer id;
...
}
package sample.student;
@Entity
@Table(name="APP_STU")
public class Application
{
@Id
private String studentId;
...
}
然后,我有一个Spring Data存储库,可从实体类之一中检索。
package sample.student;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ApplicationRepository extends CrudRepository<sample.student.Application,String>
{
}
当我尝试在注入的存储库中调用find方法(例如findById)时,我认为它应该已经查询了数据库表APP_STU。但是,它实际上查询了APP_VISA并返回了以下错误消息。
java.lang.IllegalArgumentException: org.hibernate.QueryException: Could not resolve property: studentId of: sample.visa.Application
有什么方法可以将存储库定位为APP_STU吗?还是重命名类是解决它的唯一方法?
解决方法
即使一个实体位于两个不同的程序包中,也无法为一个项目的两个不同实体使用重复的名称。
实体名称必须唯一。当不同包中的两个实体类共享相同的类名时,需要进行显式的实体名设置,以避免冲突
,只需重命名该类,我认为您不能使用两个具有相同名称的类(实体)。尝试重命名,然后再次调用,应该可以:)