@OneToMany 不创建连接 table

@OneToMany does not create the join table

我是 JPA 新手。假设我有这两个实体:

//Imports

@Entity
@Table(name="article", schema = "sch_client")
public class Article implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private int price;
    private int amount;

    //Getters & setters
}

@Entity
@Table(name="purchase", schema = "sch_client")
public class Purchase implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;

    @OneToMany
    private List<Article> listArticle;}

我想要一个类似购买包含很多文章的东西。

我的问题是: 是否有可能只有 @OneToMany 在购买 class 中指向文章 class 才能拥有所需的关系(一次购买包含多篇文章)。或者要使用 @OneToMany 注释,我必须在文章 class 上添加 @ManyToOne。如果是这样,为什么必须添加 @ManyToOne?请任何解释。 提前致谢。

首先,我写了一个误导性的标题,我会修改它使它更准确:

旧标题:在JPA中,是否可以在不使用@ManyToOne的情况下使用@OneToMany?

新标题: @OneToMany 不创建连接 table.

正如我所说,我是 JPA 的新手,我的问题可能看起来很愚蠢,我可以删除问题,但我决定保留它以防有一天有人会遇到类似的情况,它可以提供帮助!

Purchase和Article的jointable我每次执行代码都很正常,但是我没有注意到!,我在查看NetBeans的日志 并没有看到 join table,我被那些日志误导了,我认为 join table 没有出现在日志中(我希望有人可以确认此信息并进行编辑这个答案)。

我在名为 sch_sales 的新架构中创建了 Purchase 和 Article。并且连接 table 是在 public 模式 (PostgreSQL) 中创建的。

因此,为了使其更正确,我将架构添加到 @JoinTable 中,如下所示,这样我将所有 table 都放在同一架构中。

@Entity
@Table(name="purchase", schema = "sch_sales")
public class Purchase implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;

    @OneToMany
    @JoinTable(name="join_purchase_article", schema = "sch_sales", joinColumns = @JoinColumn(name="sales_fk"), inverseJoinColumns = @JoinColumn(name="article_fk"))
    private List<Article> listArticle;

 }

更新:

我创建了第 3 个 table,其中包含 Purchase 和 Article 的 ID(连接 table),这显然是不正确的。

正常的"behavior"是在Article中添加一个id_purchase列,在这个page中我找到了如何得到这样的结果。

为了得到想要的结果,我使用了下面的代码:

@Entity
@Table(name="purchase", schema = "sch_sales")
public class Purchase implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;

    @OneToMany
    @JoinColumn(name="id_purchase")
    private List<Article> listArticle;

 }