gpt4 book ai didi

java - 如何使用多个@Onetoone 和@OnetoMany 注解

转载 作者:行者123 更新时间:2023-12-04 14:51:00 25 4
gpt4 key购买 nike

我是 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;

日记条目大师

@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<>();
}

JourEntryDetail

@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

关于java - 如何使用多个@Onetoone 和@OnetoMany 注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69116747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com