java - Spring存储库按第一个实体进行选择并尝试映射到另一个实体(实体具有相同的名称)

标签 java spring hibernate jpa spring-data-jpa

我有实体:

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/

相关文章:

java - Hibernate 5 是否支持基于 XML 的实体映射?

java - 隐藏 JSON 字段

java - Oracle 日期和 EJB 日期

java - 我们如何在 Spring Boot 中连接 MySql 数据库?

java - 为什么我的 Spring Security 不工作?

java - Spring @Transactional(Propagation.NEVER) 应该创建 Hibernate session 吗?

java - 为什么我们需要HashMap以外的数据结构

java - 如何仅设置具有流式布局的面板的首选宽度?

java - 在JAVA中读取格式为PKCS1的RSA私钥

spring - 如何使用 JPA QueryBuilder 提供自定义表达式或谓词