我有实体:
package datamodel.serviceone;
@Entity(name = "user")
public class Human{
和
package datamodel.servicetwo;
@Entity(name = "user")
public class Robot{
我有存储库:
@Repository
public interface HumanRepository extends CrudRepository<Human, Long> {
Human findOneBySex(String sex);
}
但是当我尝试
humanRepository.findOneBySex("mail");
我收到错误:
Caused by: org.hibernate.QueryException: could not resolve property: sex of: datamodel.servicetwo.Robot [select generatedAlias0 from datamodel.servicetwo.Robot as generatedAlias0 where generatedAlias0.sex=:param0]
at org.hibernate.QueryException.generateQueryException(QueryException.java:120)
at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:217)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:141)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153)
at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:546)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:655)
为什么???!!!我有 2 个具有相同名称的实体,并且 spring 不会抛出像“你有 2 个相同的实体!”这样的异常。但它工作并且存储库返回实体,但另一个实体。在 Debug模式下,我看到 humanRepository.findOneBySex("mail");
必须返回 Human
但此方法在 Human
中进行选择并尝试映射到机器人
最佳答案
您应该使用@Table
注释。问题是您注册了两个具有相同名称的实体,而不是将它们绑定(bind)到相同的表。
@Entity
@Table(name = "user")
public class Human
然后:
@Entity
@Table(name = "user")
public class Robot
关于java - Spring存储库按第一个实体进行选择并尝试映射到另一个实体(实体具有相同的名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46010817/