简体   繁体   English

无法将java.lang.Long字段Event.idEvent设置为java.lang.Long

[英]Can not set java.lang.Long field Event.idEvent to java.lang.Long

I have a entity "Event" and when i want select a Event by id, i have this error : Can not set java.lang.Long 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)

here is my entity Event : 这是我的实体活动:

public class Event implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_event")
    private Long idEvent;

and here the select by id : 这里是通过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;
    }

I have check the Long and he is correct. 我检查了朗,他是正确的。 And i have the same request for a another Entity, and it works. 而且我对另一个实体有相同的要求,并且可以正常工作。 I do not understand. 我不明白。

Thank for your help. 谢谢您帮忙。

You have a mismatch in your parameters ie you try and specify a Long as the parameter for a User type: 您的参数不匹配,即您尝试为用户类型指定Long作为参数:

You change it in one of two ways: I have added This is with one sample example . 您可以通过以下两种方式之一对其进行更改:我添加了一个示例示例。

@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);

or 要么

@Query("DELETE FROM Collaborator c WHERE c.user = :user AND c.task = :task")
void deleteUserFromTask(@Param("user") User user, @Param("task") Task task);

Thanks. 谢谢。

Not sure if this will actually help, but seems like you've chosen very complex way. 不知道这是否真的有帮助,但似乎您选择了非常复杂的方法。 You can simply implement CrudRepository<Event, Long> interface with your repository and do the select using its findById method. 您可以使用存储库简单地实现CrudRepository<Event, Long>接口,并使用其findById方法进行选择。

This is actually really easy, just follow those simple steps. 实际上,这很容易,只需遵循以下简单步骤即可。

I. Implement the CrudRepository . I.实现CrudRepository

public interface EventRepository implements CrudRepository<Event, Long> {}

II. 二。 Use findById method in your service with EventRepository autowired. 在服务中使用findById方法,并自动连接EventRepository

Long id  = ...;
Optional<Event> event = eventRepository.findById(id);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Hibernate 总是得到 java.lang.IllegalArgumentException: 无法设置 java.lang.Long 字段 - Hibernate always get java.lang.IllegalArgumentException: Can not set java.lang.Long field java.lang.Long和scala.Long - java.lang.Long and scala.Long C#中的java.lang.Long - java.lang.Long in C# JaxRS 将 java.lang.Long 验证为 @QueryParam - JaxRS validate java.lang.Long as @QueryParam java.lang.IllegalArgumentException:无法将java.lang.Long字段test.models.Aktion.id设置为test.models.Aktion - java.lang.IllegalArgumentException: Can not set java.lang.Long field test.models.Aktion.id to test.models.Aktion 找不到类型为java.lang.Long的验证器:找不到类型为java.lang.Long的验证器 - No validator could be found for type: java.lang.Long :No validator could be found for type: java.lang.Long Java.lang.long无法应用于java.lang.string吗? - Java.lang.long cannot be applied to java.lang.string? 无法将java.lang.Long强制转换为java.lang.Integer - java.lang.Long cannot be cast to java.lang.Integer java.lang.ClassCastException:不能强制转换为java.lang.Long - java.lang.ClassCastException: cannot be cast to java.lang.Long 预期:java.lang.Long&lt;1&gt; 但是是:java.lang.Integer&lt;1&gt; - expected: java.lang.Long<1> but was: java.lang.Integer<1>
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM