Вопрос:

Невозможно установить для поля java.lang.Long com.jobs.spring.domain.Employee.id значение java.lang.Long

java sql hibernate jpa

457 просмотра

1 ответ

2579 Репутация автора

Я использую Java 8 с JPA2 / Hibernate5 и MySQL.

Я получаю следующую ошибку , любая помощь приветствуется.

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;
Автор: Richard Источник Размещён: 22.08.2016 09:17

Ответы (1)


0 плюса

2579 Репутация автора

РЕШИТЬ:

Необходимо использовать объект Employee, а не Long employeeId:

ParameterExpression<Employee> param = criteriaBuilder.parameter(Employee.class);
..
queryRating.setParameter(param, employee);
Автор: Richard Размещён: 22.08.2016 09:39
Вопросы из категории :
32x32