【问题标题】:Entities cannot be mapped properly via hibernate annotations实体无法通过休眠注释正确映射
【发布时间】:2017-09-07 17:16:08
【问题描述】:

我有一个发票实体,其中包含另一个实体 - 交易对手和另一个实体的列表 - 项目。在建立项目清单和发票之间的关系时,没有问题。但是,当我尝试在发票实体和交易对手实体之间建立类似的关系时,我得到一个错误:

@OneToOne or @ManyToOne on pl.coderstrust.model.Invoice.counterparty references an unknown entity: pl.coderstrust.model.counterparty.Counterparty

这是我的发票,预计只包含一个交易对手和一份物品清单。

@Entity
@Table(name = "invoices")
public class Invoice implements Comparable<Invoice>, Serializable {

      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      @Column(name = "invoice_id")
      private int id;

      @Column(name = "date")
      private LocalDate date = LocalDate.now();

      @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST,
          CascadeType.REFRESH})
      @JoinColumn(name = "nip")
      private Counterparty counterparty;

      @OneToMany(mappedBy = "invoice", cascade = {CascadeType.PERSIST, CascadeType.MERGE,
          CascadeType.DETACH, CascadeType.REFRESH})
      @JsonBackReference
      private List<InvoiceItem> invoiceItems = new ArrayList<>();

这是我的商品实体,可以与一张发票相关:

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "item_id")
  private int id;
  private String description;
  private int numberOfItems;
  private BigDecimal amount;
  private BigDecimal vatAmount;

  @JoinColumn(name = "vat_code")
  @Enumerated(EnumType.ORDINAL)
  private Vat vat;

  @OneToOne(mappedBy = "invoice_id", fetch = FetchType.EAGER, cascade = {CascadeType.DETACH,
      CascadeType.MERGE, CascadeType.PERSIST,
      CascadeType.REFRESH})
  @JsonManagedReference
  private Invoice invoice;

这是我的交易对手,应该和很多发票有关:

@Entity
@Table(name = "counterparties")
public class Counterparty implements Serializable {

  @Id
  @Column(name = "nip")
  private String nip;
  private String companyName;
  private String phoneNumber;
  private String bankName;
  private String bankNumber;
  @OneToOne(fetch = FetchType.LAZY, mappedBy = "counterparty", cascade = CascadeType.ALL)
  private Address address;

  @OneToMany(mappedBy = "counterparty", fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST,
      CascadeType.MERGE,
      CascadeType.DETACH, CascadeType.REFRESH})
  private List<Invoice> invoices;

发票与交易对手的关系出了什么问题?

【问题讨论】:

  • 请张贴Counterparty的进口。

标签: java hibernate


【解决方案1】:

当类未添加到休眠配置时,通常会引发该休眠错误。 Hibernate 需要被告知所有作为实体的类,然后才能使用它们。

你如何让 Hibernate 知道你的类? IE。通过将类添加到配置对象:

configuration.addClass(Counterparty.class);

或者通过将类添加到使用 Spring 时扫描实体的包中?

另一方面:Item 类似乎有些奇怪?它指定了与 Invoice 的 OneToOne 关系;这不应该是 ManyToOne(意味着一张发票可以有 0 个或多个 Items)吗?

【讨论】:

  • 从 SpringBootApplication 注解中提供的基础包中扫描
猜你喜欢
  • 2016-02-14
  • 1970-01-01
  • 2017-01-24
  • 2010-10-06
  • 1970-01-01
  • 2011-09-11
  • 2011-01-15
  • 2019-12-03
相关资源
最近更新 更多