java - 如何使用多个 @Onetoone 和 @OnetoMany 注释
问题描述
我是 Spring Boot 的新手,第一次做一个实验性的应用程序。这个应用程序包含 3 个类/表:
帐户:
- 有一个可以被 JournalEntryDetail 调用的帐号,所以我得到了@onetoone 关系
JournalEntryMaster:
- 可以有很多 JournalEntryDetail
- 我在这里使用@OnetoMany 注释
日记条目详细信息:
- 可以有一个 JournalEntryMaster
- Account 的外键,因为 Account number 应该等于 b/w JournalEntDetail & Account 表
我收到一个错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'entityManagerFactory' defined in class path resource
[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation
of init method failed; nested exception is org.hibernate.AnnotationException: @Column(s) not
allowed on a @OneToOne property: com.accounts.entity.JournalEntryMaster.jvNumber
我可以理解错误是什么意思,但不幸的是我没有找到解决方案,所以我来到了这里。任何人都可以建议将不胜感激。
我复制以下实体:
帐号
public class Account {
@Id
@GeneratedValue
@Column(name="account_id")
private Long id;
@Column(name="account_number")
private Long accountNumber;
@Column(name="account_name")
private String accountName;
@Enumerated(EnumType.STRING)
@Column(name="dr_or_credit")
private DrOrCrSide drOrCrSide;
@Enumerated(EnumType.STRING)
@Column(name="account_type")
private AccountType accountType;
@ManyToOne(cascade = CascadeType.ALL)
private JournalEntryDetail journalEntryDetail;
JournalEntryMaster
@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@ToString
public class JournalEntryMaster {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private Long id;
@OneToOne
@Column(name="jv_number")
private Long jvNumber;
@Column(name="jv_master_date")
private Date Date;
@Column(name="jv_reference_no")
private String ReferenceNo;
@Column(name="memo")
private String Memo;
@Column(name="posted")
private boolean Posted;
@OneToMany(targetEntity = JournalEntryDetail.class, cascade = CascadeType.ALL)
private Set<JournalEntryDetail> journalEntryDetail = new HashSet<>();
}
旅程条目详情
@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@ToString
public class JournalEntryDetail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="account_number")
private Long accountNumber;
@Enumerated(EnumType.STRING)
@Column(name="jv_detail_drcr")
private DrOrCrSide DrCr;
@Column(name="amount")
private Double Amount;
@Column(name="memo")
private String Memo;
@ManyToOne
@JoinColumn(name = "jv", referencedColumnName = "id")
private JournalEntryMaster jv;
@JoinColumn(name = "account_fk_jv", referencedColumnName = "account_number")
@OneToOne(targetEntity = Account.class, cascade = CascadeType.ALL)
private Account account_number;
@JoinColumn(name = "jvnumber_fk", referencedColumnName = "jv_number")
@OneToOne(targetEntity = JournalEntryMaster.class, cascade = CascadeType.ALL)
private JournalEntryMaster jvNumber;
解决方案
在
public class JournalEntryMaster {
...
@OneToOne <-- remove this annotation
@Column(name="jv_number")
private Long jvNumber;
您Long
用于jvNumber
. 如果这只是一个数据库列并且与实体无关,请不要使用@OneToOne
. 您可以删除注释,您的错误@Column(s) not allowed on a @OneToOne property: com.accounts.entity.JournalEntryMaster.jvNumber
将消失。
另一方面,如果它与实体相关,则必须使用JoinColumn
代替Column
和使用您的EntityClass
代替Long
。
推荐阅读
- python - 如何在 numpy 数组中查找特定值?
- github - 有没有办法查看 GitHub 事件?
- jms - 同一会话/主题上的 qpid 生产者和消费者?
- flutter - 如何在颤动的屏幕开始处添加动画显示
- c# - .NET Core 3 API 模型将复杂类型与 Angular 10 绑定
- reason - 如何在 ReScript 中将动态值设置为 Js.t 键?
- python - Flask-RESTPlus:如何在嵌套 API 模型中获取查询 sqlite 数据库的结果?
- git - 意外删除bin文件夹后恢复Gitlab
- php - php - 通过关键条件创建新数组并用另一个数组值填充
- android - 我有签名 Apk 和捆绑包,但签名 apk 的大小变小了,然后签名包