Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate无法将java.lang.Integer字段com.XXX.XXX.XXX.Coordinate.id设置为java.util.ArrayList_Java_Mysql_Hibernate_Spring Boot - Fatal编程技术网

Hibernate无法将java.lang.Integer字段com.XXX.XXX.XXX.Coordinate.id设置为java.util.ArrayList

Hibernate无法将java.lang.Integer字段com.XXX.XXX.XXX.Coordinate.id设置为java.util.ArrayList,java,mysql,hibernate,spring-boot,Java,Mysql,Hibernate,Spring Boot,我刚开始冬眠,遇到了一个问题。我无法保存包含列表的CustomObject。我将MySQL与SpingBoot一起使用 定制: @Entity public class CustomOjbect implements Serializable{ private static final long serialVersionUID = -4288223602669270676L; @Id @GeneratedValue(strategy=GenerationType.AU

我刚开始冬眠,遇到了一个问题。我无法保存包含列表<列表<坐标>>的CustomObject。我将MySQL与SpingBoot一起使用

定制:

@Entity
public class CustomOjbect implements Serializable{

    private static final long serialVersionUID = -4288223602669270676L;
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
    @Column(name = "img")
    private String img;
    @OneToOne(cascade=CascadeType.ALL)
    private Feet feet;
    @OneToMany(cascade=CascadeType.ALL, targetEntity=Coordinate.class)
    private List<List<Coordinate>> coordinates = null;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    //Other getter and setters here...
}
脚:

当我使用List而不是List>时,它工作得很好,但是当从客户端发送的对象更改为对象数组时,我不得不更改它

我该如何解决这个问题

错误:

java.lang.IllegalArgumentException:无法设置java.lang.Integer 字段com.XXXX.XXXX.XXXX.Coordinate.id到 java.util.ArrayList位于 sun.reflect.UnsafeFieldAccessorImpl.ThrowSetileGalargumentException(未知 源)~[na:1.8.0_111]at sun.reflect.UnsafeFieldAccessorImpl.ThrowSetileGalargumentException(未知 源)~[na:1.8.0_111]at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(未知源) ~(na:1.8.0_111)at sun.reflect.UnsafeObjectFieldAccessorImpl.get(未知源) ~[na:1.8.0_111]位于java.lang.reflect.Field.get(未知源代码) ~(na:1.8.0_111)at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:39) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:225) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4675) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4376) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:226) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.event.internal.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:510) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:99) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:765) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:758) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.jpa.event.internal.core.JpaPersistEventListener$1.cascade(JpaPersistEventListener.java:80) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:398) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:162) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:431) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]

在控制器中:

@RequestMapping(method = RequestMethod.POST, value = "/saveCustomObjects", consumes = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public String saveImageDetails(@RequestBody CustomObject customObject) {
        customObjectRepository.save(customObject);
        return "Saved successfully";
    }
编辑


如果你需要知道什么,请问我。对于那些面临这个问题的人

正如MGorgon在实体的评论中指出的那样,
List
是一个有效的jpa关系,而
List的
List
不是一个有效的jpa关系

所以为了解决这个问题,我更改了从客户端发送的json格式

之前的JSON格式:

{
  "coordinates": [
    [
      {
      },
      {
      }
    [
      {
      },
      {
      },
      {
      },
      {
      }
    ]
  ]
}
更改后的JSON格式:

{
  "coordinates": [
    {
      "area": [
        {
        },
        {
        }
      ]
    },
    {
      "area": [
        {
        },
        {
        },
        {
      ]
    }
  ]
}
注意:我删除了json中的一些属性以减少代码


希望它能帮助别人。

为什么不将从客户端接收的对象映射到有效的实体模型?@MGorgon我该怎么做?我想我正在这么做。我想你从客户端收到了某种类型的DTO?@MGorgon请检查我已将控制器添加到保存位置。因为实体列表是有效的jpa关系。列表列表不是。所以,您需要将表示模型和持久性模型分开,并在它们之间引入映射。
{
  "coordinates": [
    [
      {
      },
      {
      }
    [
      {
      },
      {
      },
      {
      },
      {
      }
    ]
  ]
}
{
  "coordinates": [
    {
      "area": [
        {
        },
        {
        }
      ]
    },
    {
      "area": [
        {
        },
        {
        },
        {
      ]
    }
  ]
}