Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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
Java org.springframework.orm.jpa.JpaSystemException:无法通过反射设置字段值[POST_INSERT_INDICATOR]值_Java_Mysql_Spring_Hibernate_Jpa - Fatal编程技术网

Java org.springframework.orm.jpa.JpaSystemException:无法通过反射设置字段值[POST_INSERT_INDICATOR]值

Java org.springframework.orm.jpa.JpaSystemException:无法通过反射设置字段值[POST_INSERT_INDICATOR]值,java,mysql,spring,hibernate,jpa,Java,Mysql,Spring,Hibernate,Jpa,我与一个Spring Boot项目合作,我有以下实体 @Entity public class Ip { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "IP_ADDR_ID_2") private Long id; @Column(name = "IP_ADDRESS_2") @NotEmpty private String address

我与一个Spring Boot项目合作,我有以下实体

@Entity
public class Ip {

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

    @Column(name = "IP_ADDRESS_2")
    @NotEmpty
    private String address;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "ip")
    private List<IMAssociation> httpInfoMessages2;

}
列表
是通过代码生成的

List<IMAssociation> imAssociations = new ArrayList<>();

for(int j =0; j < 5; j++){

     IMAssociation imAssociation = new IMAssociation(Long.valueOf(integerListEntry.getKey()),
                                            message);
    imAssociations.add(imAssociation);
}


Ip ip = new Ip('127.0.0.1', imAssociations); 

List<Ip> ips = new ArrayList<>();
ips.add(ip);
这里的问题是什么

更新

我已经更改了
I关联
类及其下面提供的

@Entity
public class Message {

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

    @Column(name = "STATUS_ID_2")
    private Long statusId;

    @NotEmpty
    @Column(name = "STATUS_2")
    private String status;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "message")
    private List<IMAssociation> message;
}
@Entity
@Table(name = "IP_HTTP_MESSAGE")
//@IdClass(AssociationId.class)
public class IMAssociation implements Serializable {

//    @Id
//    @GeneratedValue(strategy = GenerationType.IDENTITY)
//    private Long id;

    @Id
    @Column(name = "IP_ADDRESS_ID")
    private Long ipAddressId;

    @Id
    @Column(name = "HTTP_MESSAGE_ID")
    private Long httpMessageId;

    @ManyToOne
    @PrimaryKeyJoinColumn(name = "IP_ADDRESS_ID", referencedColumnName = "IP_ADDR_ID_2")
//    @JoinColumn(name = "ipAddressId", updatable = false, insertable = false, referencedColumnName = "IP_ADDR_ID_2")
    private Ip ip;

    @ManyToOne
    @PrimaryKeyJoinColumn(name = "HTTP_MESSAGE_ID", referencedColumnName = "S_ID_2")
//    @JoinColumn(name = "httpMessageId", updatable = false, insertable = false, referencedColumnName = "S_ID_2")
    private Message message;


    //    @ManyToOne
    @JoinColumn(name = "IP_ADDRESS_2", updatable = false, insertable = false, referencedColumnName = "IP_ADDRESS_2")
    private String address;

    @JoinColumn(name = "STATUS_CODE", updatable = false, insertable = false, referencedColumnName = "STATUS_ID_2")
    private Long code;

    @JoinColumn(name = "STATUS_MESSAGE", updatable = false, insertable = false, referencedColumnName = "STATUS_2")
    private String codeMessage;


    public IMAssociation() {
    }

    public IMAssociation(Long code, String codeMessage) {
        this.code = code;
        this.codeMessage = codeMessage;
    }
}
现在,我在运行应用程序时出现以下错误

Caused by: javax.persistence.EntityExistsException: A different object with the same identifier value was already associated with the session : [com.ef.entity.IMAssociation#IMAssociation{, ipAddressId=null, httpMessageId=null, ip=null, message=null, address='null', code=404, codeMessage='404_Not Found'}]
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1664) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1152) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
    at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_144]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_144]
这就是你的问题:

SO的类似职位:

您可以在此处有3个选项:

  • 您仍然可以实现复合键,但必须删除
    imaassociation
    实体中自动生成的Id。复合密钥将仅由两个属性组成—
    ipAddressId
    httpMessageId
    ,它们分别是从
    地址
    消息
    实体派生的/外键
  • 或者实现一个主键:在这里,您可以通过标识策略使用id自动生成,但必须删除您声明的其他id字段--
    ipAddressId
    httpMessageId
  • 如果仍要保留3个Id字段-
    Id
    ipAddressId
    httpMessageId
    ,请删除Id自动生成(
    @GeneratedValue
    注释),并手动为
    iAssociation
    实体分配Id值

  • 可能不需要
    ipAddressId
    httpMessageId
    我认为保存这些值的列是通过
    @PrimaryKeyJoinColumn
    注释在dblevel中自动生成的,并且可以通过
    ip.getMessage()和
    ip.getId()在
    imaassociation
    中访问该值

    请查看您的实体中有多个主键
    i关联
    。您可以声明具有复合主键/复合键的
    @IdClass
    @EmbeddedId
    ,但我看不出您使用了其中任何一个。此外,您在此处使用的
    @PrimaryKeyJoinColumn
    不正确。属性
    name
    应该映射到表的物理列名,而不是某些实体属性。所以它应该是
    @PrimaryKeyColumn(name=“IP\u ADDRESS\u ID”,referencedColumnName=“IP\u ADDR\u ID\u 2”)
    @PrimaryKeyColumn(name=“HTTP\u MESSAGE\u ID”,referencedColumnName=“S\u ID\u 2”)
    我已经尝试过
    @IdClass(AssociationId.class)
    Ip
    类的顶部,其中
    AssociationId
    实现了
    可序列化的
    。这并不能解决问题,仍然会提供相同的错误。使用
    @EmbeddedId
    的正确方法是什么?我用它代替了
    @Id
    ,得到了一些error@Ish实际上,我已经尝试了我提供的所有建议,但仍然得到相同的错误。如果您现在有一个开放的IDE,您是否介意提供一个有效的解决方案?我已经尝试了第一个选项,但出现了一些错误。我在更新的问题中提供了错误堆栈。如果您能提供一个有效的解决方案,我将不胜感激,因为这样做不会出错,但令人惊讶的是,我在地址列中找不到任何值,我想是wiredremove
    String address
    和使用
    ip.getAddress()
    @Entity
    @Table(name = "IP_HTTP_MESSAGE")
    //@IdClass(AssociationId.class)
    public class IMAssociation implements Serializable {
    
    //    @Id
    //    @GeneratedValue(strategy = GenerationType.IDENTITY)
    //    private Long id;
    
        @Id
        @Column(name = "IP_ADDRESS_ID")
        private Long ipAddressId;
    
        @Id
        @Column(name = "HTTP_MESSAGE_ID")
        private Long httpMessageId;
    
        @ManyToOne
        @PrimaryKeyJoinColumn(name = "IP_ADDRESS_ID", referencedColumnName = "IP_ADDR_ID_2")
    //    @JoinColumn(name = "ipAddressId", updatable = false, insertable = false, referencedColumnName = "IP_ADDR_ID_2")
        private Ip ip;
    
        @ManyToOne
        @PrimaryKeyJoinColumn(name = "HTTP_MESSAGE_ID", referencedColumnName = "S_ID_2")
    //    @JoinColumn(name = "httpMessageId", updatable = false, insertable = false, referencedColumnName = "S_ID_2")
        private Message message;
    
    
        //    @ManyToOne
        @JoinColumn(name = "IP_ADDRESS_2", updatable = false, insertable = false, referencedColumnName = "IP_ADDRESS_2")
        private String address;
    
        @JoinColumn(name = "STATUS_CODE", updatable = false, insertable = false, referencedColumnName = "STATUS_ID_2")
        private Long code;
    
        @JoinColumn(name = "STATUS_MESSAGE", updatable = false, insertable = false, referencedColumnName = "STATUS_2")
        private String codeMessage;
    
    
        public IMAssociation() {
        }
    
        public IMAssociation(Long code, String codeMessage) {
            this.code = code;
            this.codeMessage = codeMessage;
        }
    }
    
    Caused by: javax.persistence.EntityExistsException: A different object with the same identifier value was already associated with the session : [com.ef.entity.IMAssociation#IMAssociation{, ipAddressId=null, httpMessageId=null, ip=null, message=null, address='null', code=404, codeMessage='404_Not Found'}]
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1664) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1152) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
        at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source) ~[na:na]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_144]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_144]