Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @OneToMany不创建联接表_Java_Jpa_Entity_One To Many_Many To One - Fatal编程技术网

Java @OneToMany不创建联接表

Java @OneToMany不创建联接表,java,jpa,entity,one-to-many,many-to-one,Java,Jpa,Entity,One To Many,Many To One,我是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)

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

@实体
@表(name=“purchase”,schema=“sch_client”)
公共类实现了可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
私有字符串名称;
@独身癖
私有列表listArticle;}
我想有一些像购买包含许多文章

我的问题是:在Purchase类中,只有指向Article类的
@OneToMany
才可能具有所需的关系(一次购买包含许多物品)。或者要使用
@OneToMany
注释,我必须在Article类上添加
@ManyToOne
。如果是,为什么必须添加
@ManyToOne
?请解释一下。
提前感谢。

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

旧标题:在JPA中,是否可以使用@OneToMany而不使用@ManyToOne

新标题:@OneToMany不创建联接表

正如我所说,我是JPA新手,我的问题可能看起来很愚蠢,我可以删除这个问题,但我决定保留它,以防将来有人会面临类似的情况,它会有帮助

每次我非常正常地执行代码时,都会创建Purchase和Article的连接表,但我没有注意到!,我正在检查NetBeans的日志 并且没有看到连接表,我被那些日志误导了,我认为连接表没有出现在日志中(我希望有人能确认这些信息并编辑这个答案)

我在一个名为schu sales的新模式中创建了Purchase和Article。连接表是在公共模式(PostgreSQL)中创建的

所以,为了使其更加正确,我将schema添加到@JoinTable中,如下所示,就像这样,我将所有表都放在同一个schema中

@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;

 }

@这里是一个如何实现单向关系的示例。他们使用连接表@ZiMtyth您可能也希望查看
Cascade
,以便在删除购买时(例如,随购买一起删除文章),它用于对象反序列化,并允许您使用较新的字节码反序列化类的旧版本。这种想法毫无意义——每次以与旧版本不兼容的方式更改类时,都必须手动更改值,并在jvm中保持其唯一性。如果您完全忽略它,编译器会为您执行此操作。如果您想控制它,您可以使用serialver工具稍后修复它。您的类甚至没有进行经典意义上的反序列化,因此它毫无意义。除非你完全理解它,否则你不应该这样做。阅读以下答案:
@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;

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

 }