【问题标题】:Can not set java.lang.Long field com.jobs.spring.domain.Employee.id to java.lang.Long无法将 java.lang.Long 字段 com.jobs.spring.domain.Employee.id 设置为 java.lang.Long
【发布时间】:2016-08-22 21:17:15
【问题描述】:

我正在使用带有 JPA2/Hibernate5 和 MySQL 的 Java 8。

我收到以下错误,不胜感激。

PropertyAccessException: Error accessing field [private java.lang.Long com.jobs.spring.domain.Employee.id] by reflection for persistent property [com.jobs.spring.domain.Employee#id] : 31

IllegalArgumentException: Can not set java.lang.Long field com.jobs.spring.domain.Employee.id to java.lang.Long

表格

+--------+    +----------------+    +----------+ 
| Rating |    | Rating_Employee|    | Employee |
+--------+    +----------------+    +----------+ 
| ID     |    | RAT_ID         |    | ID       |
| REVIEW |    | EMP_ID         |    +----------+ 
+--------+    +----------------+    

代码

@Override
public List<Rating> findAll(int firstResult, int maxResults, Long employeeId) {
    final EntityManagerFactory entityManagerFactory = entityManager.getEntityManagerFactory();
    final CriteriaBuilder criteriaBuilder = entityManagerFactory.getCriteriaBuilder();
    CriteriaQuery<Rating> criteria = criteriaBuilder.createQuery(Rating.class);
    Root<Rating> root = criteria.from(Rating.class);
    ParameterExpression<Long> param = criteriaBuilder.parameter(Long.class);
    criteria.select(root).where(criteriaBuilder.equal(root.get("employee"), param));
    TypedQuery<Rating> queryRating = entityManager.createQuery(criteria);
    queryRating.setParameter(param, employeeId);
    List<Rating> results = queryRating.getResultList();

    return results;
}

模型(Rating.java)

@OneToOne(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable
(
    name="rating_employee",
    joinColumns={ @JoinColumn(name="RAT_ID", referencedColumnName="ID") },
    inverseJoinColumns={ @JoinColumn(name="EMP_ID", referencedColumnName="ID") }
)
private Employee employee;

模型 (Employee.java)

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

【问题讨论】:

    标签: java sql hibernate jpa


    【解决方案1】:

    已解决:

    需要使用 Employee 对象而不是 Long employeeId:

    ParameterExpression<Employee> param = criteriaBuilder.parameter(Employee.class);
    ..
    queryRating.setParameter(param, employee);
    

    【讨论】:

      猜你喜欢
      • 2019-11-13
      • 2021-09-28
      • 2012-05-20
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      相关资源
      最近更新 更多