Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.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/7/css/36.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
Hibernate JPA 2.0仅更新和插入子表_Hibernate_Jpa 2.0 - Fatal编程技术网

Hibernate JPA 2.0仅更新和插入子表

Hibernate JPA 2.0仅更新和插入子表,hibernate,jpa-2.0,Hibernate,Jpa 2.0,我不熟悉Hibernate JPA…..我有一个父表和多个子表。我想根据父表的存在在子表中插入记录。我不想在父表中插入任何记录。如果父表中存在条目,则我想在子表中插入。我尝试将父表主键中的insertable和Updateable设置为false。但它不起作用。我使用的是JPA2.0版本。提前谢谢。请让我知道任何其他信息 ==================从注释粘贴的副本: 代码示例: @Entity @NamedQuery(name="Custome.findAll", query="SEL

我不熟悉Hibernate JPA…..我有一个父表和多个子表。我想根据父表的存在在子表中插入记录。我不想在父表中插入任何记录。如果父表中存在条目,则我想在子表中插入。我尝试将父表主键中的insertable和Updateable设置为false。但它不起作用。我使用的是JPA2.0版本。提前谢谢。请让我知道任何其他信息

==================从注释粘贴的副本:

代码示例:

@Entity
@NamedQuery(name="Custome.findAll", query="SELECT p FROM Customer p") 
public class Customer extends AbstractObject implements Serializable {
  private static final long serialVersionUID = 1L;

  @EmbeddedId
  private CustomerPK pk;

 @Temporal(TemporalType.DATE)
 @Column(name="end_dt") 
 private Date endDt; 

 @Column(name="desc_txt") 
 private String descTxt; 

 //bi-directional many-to-one association to Dependent 
 @OneToMany(mappedBy="customer", cascade=CascadeType.ALL) 
 private List<Dependent> dependents = new ArrayList<>(); 
}
@实体
@NamedQuery(name=“Custome.findAll”,query=“从客户p中选择p”)
公共类Customer extends AbstractObject实现可序列化{
私有静态最终长serialVersionUID=1L;
@嵌入ID
私人客户pk;
@时态(TemporalType.DATE)
@列(name=“end_dt”)
私人日期endDt;
@列(name=“desc_txt”)
私有字符串descTxt;
//双向多对一关联到依赖
@OneToMany(mappedBy=“customer”,cascade=CascadeType.ALL)
private List dependents=new ArrayList();
}

我想更新customer表和wan中的descTxt以插入依赖表。若CustomerPK存在于表中,那个么我想更新,若不存在,我想跳过Customer表中记录的更新和插入。当前我正在使用session.saveorUpdate(object)如果记录存在,它将更新父记录并插入子表,但如果父记录不存在,它将插入父记录,而子记录我不想插入父记录

JPA将无法修复此问题。如果调用“saveOrUpdate”,它将保存或更新。如果它能像你期望的那样表现,那将是非常糟糕的

实际上,如果不打算保存新的Customer对象,则不应创建它。您最好在JPA之外实现签入代码,例如

Customer customer = entityManager.find(Customer.class, customerPK);
if(customer != null){
  customer.setDescription(...)
  customer.addDependent(new Dependent (...))
  //customer + dependents will be saved at end of transaction or at flush
}
else {
  LOG.info("Ignoring unexisting id", customerPk)
}
注:

  • 如果客户实例是由Hibernate创建的,并且您执行了正确的事务/会话管理,则无需调用session.saveOrUpdate。Hibernate将跟踪当前会话中对持久对象的所有更改,并在会话结束时刷新这些更改
  • 如果将从属项添加到客户的从属项列表中(最佳做法是使用addXxx方法),它也将在会话结束时自动插入正确的外键

请添加一些代码以显示您正在尝试执行的操作?父实体和子实体是什么,它们之间有什么关系?代码示例:@Entity@NamedQuery(name=“Custome.findAll”,query=“SELECT p FROM Customer p”)publi}c类Customer extends AbstractObject实现可序列化的{private static final long serialVersionUID=1L;@EmbeddedId private CustomerPK;@Temporal(TemporalType.DATE)@Column(name=“end_dt”)private Date endDt;@Column(name=“desc_txt”)private String descTxt;//双向多对一关联到Dependent@OneToMany(mappedBy=“customer”,cascade=CascadeType.ALL)private List dependents=new ArrayList();我想更新customer表和wan中的descTxt以插入相关表。如果表中存在CustomerPK,则我想更新,如果不存在,则我想跳过customer表中记录的更新和插入。目前我正在使用session.saveorUpdate(对象)如果记录存在,它正在更新父记录并插入到子表中,但如果父记录不存在,则它正在插入父记录和子记录,我不想在父记录中插入这些记录谢谢您的更新..它将尝试并让您知道此选项。感谢您的更新..它将尝试并让您知道…一个我需要的更多说明是customer.addDependent(…)需要添加到customer中?或者在检查customer实体的存在后,我可以使用session.Save或Update吗?请参阅添加的注释