@OneToOne 注释错误:引用未知实体:

时间:2021-07-14 10:51:19

标签: java spring-boot spring-data-jpa

我致力于学习应用程序,实际上是在两个表之间建立关系。

用户 - 可以有一个主帐户的基表 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 +
            '}';
    }
   }

2 个答案:

答案 0 :(得分:2)

必须在 PrimaryAccount 中添加 @Entity 注解

答案 1 :(得分:0)

在 Spring Data Jpa 中,您必须使用 @Entity Annotation 对类进行批注,这就是未创建 bean 的原因,如果您愿意,也可以提及 @Table 批注以提及表名。

相关问题