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