![](/img/trans.png)
[英]Hibernate always get java.lang.IllegalArgumentException: Can not set java.lang.Long field
[英]Can not set java.lang.Long field Event.idEvent to java.lang.Long
我有一個實體“事件”,當我想通過id選擇一個事件時,出現此錯誤:無法將java.lang.Long Event.idEvent設置為java.lang.Long
javax.persistence.PersistenceException: org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private java.lang.Long Event.idEvent] by reflection for persistent property [Event#idEvent] : 1
org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1538)
org.hibernate.query.Query.getResultList(Query.java:165)
fr.eni.sortircom.dal.dao.hibernate.HibernateRegistrationDAO.selectById(HibernateRegistrationDAO.java:19)
fr.eni.sortircom.bll.RegistrationManager.selectParticipantEvent(RegistrationManager.java:27)
fr.eni.sortircom.servlet.ShowEventServlet.doGet(ShowEventServlet.java:28)
javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
cause mère
org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private java.lang.Long fr.eni.sortircom.bo.Event.idEvent] by reflection for persistent property [fr.eni.sortircom.bo.Event#idEvent] : 1
org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:75)
org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:224)
org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4940)
org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4640)
org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:297)
org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:347)
org.hibernate.type.EntityType.getIdentifier(EntityType.java:495)
org.hibernate.type.EntityType.nullSafeSet(EntityType.java:288)
org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:53)
org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:645)
org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:2006)
org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1920)
org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1898)
org.hibernate.loader.Loader.doQuery(Loader.java:937)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:340)
org.hibernate.loader.Loader.doList(Loader.java:2695)
org.hibernate.loader.Loader.doList(Loader.java:2678)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2512)
org.hibernate.loader.Loader.list(Loader.java:2507)
org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:504)
org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:396)
org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:224)
org.hibernate.internal.SessionImpl.list(SessionImpl.java:1538)
org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1561)
org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1529)
org.hibernate.query.Query.getResultList(Query.java:165)
fr.eni.sortircom.dal.dao.hibernate.HibernateRegistrationDAO.selectById(HibernateRegistrationDAO.java:19)
fr.eni.sortircom.bll.RegistrationManager.selectParticipantEvent(RegistrationManager.java:27)
fr.eni.sortircom.servlet.ShowEventServlet.doGet(ShowEventServlet.java:28)
javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
cause mère
java.lang.IllegalArgumentException: Can not set java.lang.Long field fr.eni.sortircom.bo.Event.idEvent to java.lang.Long
sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58)
sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)
java.lang.reflect.Field.get(Field.java:393)
org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:71)
org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:224)
org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4940)
org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4640)
org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:297)
org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:347)
org.hibernate.type.EntityType.getIdentifier(EntityType.java:495)
org.hibernate.type.EntityType.nullSafeSet(EntityType.java:288)
org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:53)
org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:645)
org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:2006)
org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1920)
org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1898)
org.hibernate.loader.Loader.doQuery(Loader.java:937)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:340)
org.hibernate.loader.Loader.doList(Loader.java:2695)
org.hibernate.loader.Loader.doList(Loader.java:2678)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2512)
org.hibernate.loader.Loader.list(Loader.java:2507)
org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:504)
org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:396)
org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:224)
org.hibernate.internal.SessionImpl.list(SessionImpl.java:1538)
org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1561)
org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1529)
org.hibernate.query.Query.getResultList(Query.java:165)
fr.eni.sortircom.dal.dao.hibernate.HibernateRegistrationDAO.selectById(HibernateRegistrationDAO.java:19)
fr.eni.sortircom.bll.RegistrationManager.selectParticipantEvent(RegistrationManager.java:27)
fr.eni.sortircom.servlet.ShowEventServlet.doGet(ShowEventServlet.java:28)
javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
這是我的實體活動:
public class Event implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_event")
private Long idEvent;
這里是通過id選擇:
public Event selectById(Long id) {
Session session = ConnectionProvider.getConnection();
Query q = session.createQuery("FROM Event WHERE idEvent=:id");
q.setParameter("id", id);
List<Event> events = q.getResultList();
Event event = events.get(0);
return event;
}
我檢查了朗,他是正確的。 而且我對另一個實體有相同的要求,並且可以正常工作。 我不明白。
謝謝您幫忙。
您的參數不匹配,即您嘗試為用戶類型指定Long作為參數:
您可以通過以下兩種方式之一對其進行更改:我添加了一個示例示例。
@Query("DELETE FROM Collaborator c WHERE c.user.id = :userId AND c.task.id =:taskId")
void deleteUserFromTask(@Param("userId") Long userId, @Param("taskId") Long taskId);
要么
@Query("DELETE FROM Collaborator c WHERE c.user = :user AND c.task = :task")
void deleteUserFromTask(@Param("user") User user, @Param("task") Task task);
謝謝。
不知道這是否真的有幫助,但似乎您選擇了非常復雜的方法。 您可以使用存儲庫簡單地實現CrudRepository<Event, Long>
接口,並使用其findById
方法進行選擇。
實際上,這很容易,只需遵循以下簡單步驟即可。
I.實現CrudRepository
。
public interface EventRepository implements CrudRepository<Event, Long> {}
二。 在服務中使用findById
方法,並自動連接EventRepository
。
Long id = ...;
Optional<Event> event = eventRepository.findById(id);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.