尝试进行实体关系映射时出现错误-由:org.hibernate.AnnotationException

时间:2019-01-07 15:30:12

标签: java spring-boot jpa h2 spring-restcontroller

尝试执行OneToMany和ManyToOne映射时出错-错误:->原因:org.hibernate.AnnotationException:引用com.xx.xx.xx.entities.SoftwareSetup的外键来自com.xx.xx.xx .entities.SoftwareAccount的列数错误。应该是1

帐户表的主键是复合键,因为它具有帐户ID和版本组合。因此,基本上每个帐户ID的每个版本都可以有多个设置。 由于使用了复合键,我无法达到预期的效果。

出现如下错误,

由以下原因引起:org.hibernate.AnnotationException:从com.xx.xx.xx.entities.SoftwareAccount引用com.xx.xx.xx.entities.SoftwareSetup的外键具有错误的列数。应该是1

注意:单独地,我既可以在表上执行CRUD操作,又可以以JSON格式获取数据。另外,如果我在SoftwareAccount中使用@ManyToOne映射,那么我可以在帐户的JSON数据中看到设置的特定行。

有关更多详细信息,请参见下面的代码段。由于某些限制,我更改了班级和字段名称。如果您需要更多详细信息来帮助我,请告诉我。预先感谢。

@Entity
public class SoftwareAccount implements Serializable
{
@EmbeddedId
private SoftwareAccountId saId;

/*@ManyToOne(cascade=CascadeType.ALL)
      @JoinColumn(name = "setupId")
  private SoftwareSetup softwareSetup;*/ 


}

 /*If Uncommented this @ManyToOne line then whole setup object data will 
   show in JSON as below : 
   URL - http://localhost:8009/softwareAccount */

  {
    "saId": {
        "accountVersion": 1,
        "accountId": "AC101_B01_EUR_E"
    },
    "status": "Active",
    "softwareSetup": {
        "setupId": 101,
        "description": "Description 1",
        "status": "Active",
        "softwareAccountSet": []
    }
  }


@Embeddable
public class SoftwareAccountId implements Serializable
{

@Column
private long accountVersion;
@Column
private String accountId;

}

@Entity
public class SoftwareSetup implements Serializable 
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long setupId;

@OneToMany(cascade = CascadeType.ALL)
@JoinColumns({ @JoinColumn(name = "saId.accountVersion"), 
    @JoinColumn(name = "saId.accountId") })
private Set<SoftwareAccount> softwareAccountSet


}
/* Error comes when @JoinColumns line is present. If this line is been 
    commented then the below JSON data comes and a bridge table gets 
    created with 3 columns: accountId, accountVersion and setupId .

URL - http://localhost:8009/softwareSetup */

{
    "setupId": 101,
    "description": "Description 1",
    "status": "Active",
    "softwareAccountSet": []
}

我希望获得JSON数据,该数据将包含许多详细信息,例如帐户ID和根据用户从UI选择的特定版本,这将创建一个设置ID,并且应将设置ID保存在帐户表中。这样我就可以通过搜索设置ID来获取帐户详细信息。

0 个答案:

没有答案