尝试执行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来获取帐户详细信息。