【问题标题】:Hibernate Error accessing field, mapping issues休眠错误访问字段,映射问题
【发布时间】:2020-05-19 15:02:59
【问题描述】:

我正在尝试实现休眠,并且正在查看我的一个使用注释的旧项目。我想要一个多线程映射。这是课程。

用于保存 ListItems 的类,保持对其中我正在尝试映射的所有项目的引用。

private List<ListItem> listItems

@Entity
@Table(name = "ITEMLIST")
public class ItemList {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private UUID listId;
    @Column(unique = true)
    private String name;
    @Enumerated(EnumType.STRING)
    private ListTypes listType;
    @OneToMany(mappedBy = "itemList")
    private List<ListItem> listItems;
    @Column(unique = true)
    private int position;

ListItem 类保留对其当前所在列表的引用。

private ItemList itemList;

@Entity
@Inheritance
@DiscriminatorColumn(name = "ITEMTYPE")
@Table(name = "LISTITEM")
public abstract class ListItem {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private UUID itemId;
    @ManyToOne
    @JoinColumn
    private ItemList itemList;
    private String url;
    private String name;
    private Date dateAdded;
    private int position;

用于测试持久性的测试代码:

    public ItemList createList(){
        Session session = factory.openSession();
        ItemList itemList = new ItemList();
        session.save(itemList);
        factory.close();
        return itemList;
    }

这给了我这个错误日志:

Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private java.util.List<xxx.listorganizer.listorganizer.Interfaces.ListItem> xxx.listorganizer.listorganizer.Models.ItemList.listItems] by reflection for persistent property [xxx.listorganizer.listorganizer.Models.ItemList#listItems] : xxx.listorganizer.listorganizer.Models.ItemList@7955d081
    at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:75)
    at org.hibernate.property.access.spi.GetterFieldImpl.getForInsert(GetterFieldImpl.java:90)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.getPropertyValuesToInsert(AbstractEntityTuplizer.java:570)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.getPropertyValuesToInsert(PojoEntityTuplizer.java:226)
    at org.hibernate.persister.entity.AbstractEntityPersister.getPropertyValuesToInsert(AbstractEntityPersister.java:5170)
    at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:271)
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:198)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:128)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:193)
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:178)
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:75)
    at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:108)
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:618)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:611)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:606)
    at xxx.listorganizer.listorganizer.DAOs.ListDAO.createList(ListDAO.java:21)
    at xxx.listorganizer.listorganizer.ListorganizerApplication.main(ListorganizerApplication.java:14)
    ... 5 more
Caused by: java.lang.IllegalArgumentException: Can not set java.util.List field xxx.listorganizer.listorganizer.Models.ItemList.listItems to xxx.listorganizer.listorganizer.Models.ItemList
    at ...

希望有人可以提供帮助:)

【问题讨论】:

  • 在注释掉列表部分后,我尝试再次运行代码,它给了我与 ListTypes 枚举变量相同的错误。似乎它与帖子中最初提到的列表之外的其他东西有关。

标签: java spring hibernate jpa persistence


【解决方案1】:

我认为它无法创建抽象类的对象

【讨论】:

    【解决方案2】:

    原来这与我使用 UUID 生成 id 有关。将此更改为 long 修复它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      • 2011-01-31
      • 1970-01-01
      • 2014-05-12
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多