Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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 对JPA感到困惑_Java_Jpa_Eclipselink - Fatal编程技术网

Java 对JPA感到困惑

Java 对JPA感到困惑,java,jpa,eclipselink,Java,Jpa,Eclipselink,我有两节课 public class Invoice { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "invoice_id", unique = true) private int invId; @OneToMany(mappedBy = "invoiceList", cascade = CascadeType.ALL, fetch = FetchType.LAZY

我有两节课

public class Invoice {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "invoice_id", unique = true)
   private int invId;

   @OneToMany(mappedBy = "invoiceList", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
   private List<Item> itemList;

   @Column(name = "invoice_amt", nullable = false)
   private Double invAmt;
 }
公共类发票{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“invoice\u id”,unique=true)
因维德私人酒店;
@OneToMany(mappedBy=“invoiceList”,cascade=CascadeType.ALL,fetch=FetchType.LAZY,orphanRemoving=true)
私人清单项目清单;
@列(name=“发票金额”,可空=假)
私人双重入侵;
}
以及

公共类项目{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“item\u id”,unique=true)
私有int-itemId;
@manytone(可选=false,targetEntity=Invoice.class)
@JoinColumn(name=“发票号”)
私人清单发票清单;
}
我是JPA的新手。所以我的理解可能不准确

我的理解是,如果我保存发票,则该瞬间的发票id应级联到所有项目的发票id

但是,我看到项目正在保存,但获取项目的
null
代替发票id

我错过了什么

更新!!!更新


好的,所以我将
@ManyToOne
更改为一个单数属性,并执行了
objItem.setInvoice(objInvoice)
并保存了它。但是,我仍然在发票id上获得
NULL

您正在注释多对一关系,但在两侧都使用集合。这是行不通的。一侧必须将关系映射到单个属性。在你的情况下,应该是

@ManyToOne
private Invoice invoice
也许你更需要一个多对多的关系。在这种情况下,您需要将注释更改为
@ManyToMany
,并去掉级联(它们往往无法从多方面按预期工作)

targetEntity
属性和
@JoinColumn
注释在
项目
发票
属性上是多余的


为了让
项目
保存相关发票的id,您首先需要设置
项目
发票
属性,因为项目是拥有方(存储关系信息的一方)

您正在注释多对一关系,但在两侧都使用集合。这是行不通的。一侧必须将关系映射到单个属性。在你的情况下,应该是

@ManyToOne
private Invoice invoice
也许你更需要一个多对多的关系。在这种情况下,您需要将注释更改为
@ManyToMany
,并去掉级联(它们往往无法从多方面按预期工作)

targetEntity
属性和
@JoinColumn
注释在
项目
发票
属性上是多余的


为了让
项目
保存相关发票的id,您首先需要设置
项目
发票
属性,因为项目是拥有方(存储关系信息的一方)

我不确定这是你唯一的问题,但1:n关系不应该有一个双向的
列表。如果您将
List
转换为一个简单的
Invoice
对象,您至少会更接近解决方案。如果您的代码仍然失败,我们可以从那里开始

public class Item {
    @ManyToOne(optional = false, targetEntity = Invoice.class)
    @JoinColumn(name = "invoice_id")
    private Invoice invoice;
}

public class Invoice {
    @OneToMany(mappedBy = "invoiceList", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
    private List<Item> itemList;
}
公共类项目{
@manytone(可选=false,targetEntity=Invoice.class)
@JoinColumn(name=“发票号”)
私人发票;
}
公共类发票{
@OneToMany(mappedBy=“invoiceList”,cascade=CascadeType.ALL,fetch=FetchType.LAZY,orphanRemoving=true)
私人清单项目清单;
}

我不确定这是您唯一的问题,但1:n关系不应该有一个双向的
列表。如果您将
List
转换为一个简单的
Invoice
对象,您至少会更接近解决方案。如果您的代码仍然失败,我们可以从那里开始

public class Item {
    @ManyToOne(optional = false, targetEntity = Invoice.class)
    @JoinColumn(name = "invoice_id")
    private Invoice invoice;
}

public class Invoice {
    @OneToMany(mappedBy = "invoiceList", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
    private List<Item> itemList;
}
公共类项目{
@manytone(可选=false,targetEntity=Invoice.class)
@JoinColumn(name=“发票号”)
私人发票;
}
公共类发票{
@OneToMany(mappedBy=“invoiceList”,cascade=CascadeType.ALL,fetch=FetchType.LAZY,orphanRemoving=true)
私人清单项目清单;
}

Ok,所以我将@ManyToOne更改为单数属性,并执行了objItem.setInvoice(objInvoice)并保存了它。但是,我的发票id仍然为空。可能会出错的事情太多了。看起来我们只移除了其中的一部分。如果没有您当前的代码,包括进行设置和保存的代码,我猜不出哪里出了问题。请相应地更新问题或创建一个新问题。谢谢。我让它跑了。我只是遇到了一些逻辑错误,导致无法保存正确的数据。所以我将@ManyToOne更改为单数属性,并执行了objItem.setInvoice(objInvoice)并保存了它。但是,我的发票id仍然为空。可能会出错的事情太多了。看起来我们只移除了其中的一部分。如果没有您当前的代码,包括进行设置和保存的代码,我猜不出哪里出了问题。请相应地更新问题或创建一个新问题。谢谢。我让它跑了。我只是有一些逻辑错误,阻止了正确的数据被保存。