我致力于学习应用程序,实际上是在两个表之间建立关系。
用户 - 可以有一个主帐户的基表 PrimaryAccount - 这也是对带有 OnetoMany 注释的 PrimaryTransactions 的引用, PrimaryTransaction - 引用 PrimaryAccount 作为与主要帐户相关的许多交易。
虽然(根据我的看法)我提到了两个类之间的正确引用,但出现如下错误。错误可能是因为 PrimaryAccount.java 没有 User.java 的引用,而 User.java 确实有 PrimaryAccount.java 的引用。 我想知道我跟随的讲师以这种方式成功运行了他的应用程序。 任何帮助将不胜感激。
错误:
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: @OneToOne or
@ManyToOne on com.userfront.domain.PrimaryTransaction.primaryAccount references an unknown
entity: com.userfront.domain.PrimaryAccount
PrimaryAccount.java
package com.userfront.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.List;
public class PrimaryAccount {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private int accountNumber;
private BigDecimal accountBalance;
@OneToMany(mappedBy = "primaryAccount", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JsonIgnore
private List<PrimaryTransaction> primaryTransactionList;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public int getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(int accountNumber) {
this.accountNumber = accountNumber;
}
public BigDecimal getAccountBalance() {
return accountBalance;
}
public void setAccountBalance(BigDecimal accountBalance) {
this.accountBalance = accountBalance;
}
public List<PrimaryTransaction> getPrimaryTransactionList() {
return primaryTransactionList;
}
public void setPrimaryTransactionList(List<PrimaryTransaction> primaryTransactionList) {
this.primaryTransactionList = primaryTransactionList;
}
}
PrimaryTransaction.java
package com.userfront.domain;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;
@Entity
public class PrimaryTransaction {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private Date date;
private String description;
private double amount;
public PrimaryTransaction() {
}
public PrimaryTransaction(Date date, String description, String type, String status, double amount, BigDecimal availableBalance, PrimaryAccount primaryAccount) {
this.date = date;
this.description = description;
this.amount = amount;
this.primaryAccount = primaryAccount;
}
@ManyToOne
@JoinColumn(name = "primary_account_id")
private PrimaryAccount primaryAccount;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
public PrimaryAccount getPrimaryAccount() {
return primaryAccount;
}
public void setPrimaryAccount(PrimaryAccount primaryAccount) {
this.primaryAccount = primaryAccount;
}
}
用户.java
package com.userfront.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import javax.persistence.*;
import java.util.List;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "userId", nullable = false, updatable = false)
private Long userId;
private String username;
private String password;
private String firstName;
private String lastName;
@Column(name = "email", nullable = false, updatable = false)
private String email;
private String phone;
private boolean enable = true;
@OneToOne
private PrimaryAccount primaryAccount;
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public boolean isEnable() {
return enable;
}
public void setEnable(boolean enable) {
this.enable = enable;
}
public PrimaryAccount getPrimaryAccount() {
return primaryAccount;
}
public void setPrimaryAccount(PrimaryAccount primaryAccount) {
this.primaryAccount = primaryAccount;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", username='" + username + '\'' +
", password='" + password + '\'' +
", firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", email='" + email + '\'' +
", phone='" + phone + '\'' +
", enable=" + enable +
", primaryAccount=" + primaryAccount +
'}';
}
}
答案 0 :(得分:2)
必须在 PrimaryAccount 中添加 @Entity 注解
答案 1 :(得分:0)
在 Spring Data Jpa 中,您必须使用 @Entity Annotation 对类进行批注,这就是未创建 bean 的原因,如果您愿意,也可以提及 @Table 批注以提及表名。