有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

mysql Hibernate无法设置java。整型字段。XXX。XXX。XXX。坐标java的id。util。ArrayList

我刚开始冬眠,遇到了一个问题。我无法保存包含列表的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...
}

协调:

@Entity
public class Coordinate implements Serializable{

    private static final long serialVersionUID = 7288778461661904967L;
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;

    @Column(name = "y")
    private Float y;
    @Column(name = "x")
    private Float x;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    //Getter and setters here...
}

脚:

@Entity
public class Feet implements Serializable {

    private static final long serialVersionUID = -8438970667123556624L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;

    @Column(name = "height")
    private Integer height;

    @Column(name = "width")
    private Integer width;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
    //Getter and setters here
}

当我做列表时,它通常工作得很好<;协调>;而不是列表<&书信电报;列表<;协调>>;,但我不得不更改它,因为从客户端发送的对象更改为对象数组

我该如何解决这个问题

错误:

java.lang.IllegalArgumentException: Can not set java.lang.Integer field com.XXXX.XXXX.XXXX.Coordinate.id to java.util.ArrayList at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source) ~[na:1.8.0_111] at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source) ~[na:1.8.0_111] at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source) ~[na:1.8.0_111] at sun.reflect.UnsafeObjectFieldAccessorImpl.get(Unknown Source) ~[na:1.8.0_111] at java.lang.reflect.Field.get(Unknown Source) ~[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";
    }

编辑

如果你需要知道什么,请问我


共 (1) 个答案

  1. # 1 楼答案

    对于那些面临这个问题的人

    正如MGorgon在评论中指出的,{}的实体{}是一种有效的jpa关系,而{}{}的{}不是有效的jpa关系

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

    JSON格式之前:

    {
      "coordinates": [
        [
          {
          },
          {
          }
        [
          {
          },
          {
          },
          {
          },
          {
          }
        ]
      ]
    }
    

    更改后的JSON格式:

    {
      "coordinates": [
        {
          "area": [
            {
            },
            {
            }
          ]
        },
        {
          "area": [
            {
            },
            {
            },
            {
          ]
        }
      ]
    }
    

    注意:为了减少代码,我删除了json中的一些属性

    希望它能帮助别人