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
Hibernate JPA实体管理问题_Hibernate_Jpa_Persistence_Entitymanager - Fatal编程技术网

Hibernate JPA实体管理问题

Hibernate JPA实体管理问题,hibernate,jpa,persistence,entitymanager,Hibernate,Jpa,Persistence,Entitymanager,我对JPA/Hibernate和Java都是新手,在使用EntityManager类管理持久对象的基础知识方面遇到了一些问题。如果有人能向我解释一些非常基本的东西,我将不胜感激,因为我无法从文档中理解 JSE环境中的JPA2/Hibernate/Postgresql *下面的类定义* 以下是我所期望的工作: em.getTransaction().begin(); Car corolla = new Car(); Part clutch = new Part(); clutch.setCar(

我对JPA/Hibernate和Java都是新手,在使用EntityManager类管理持久对象的基础知识方面遇到了一些问题。如果有人能向我解释一些非常基本的东西,我将不胜感激,因为我无法从文档中理解

JSE环境中的JPA2/Hibernate/Postgresql

*下面的类定义*

以下是我所期望的工作:

em.getTransaction().begin();
Car corolla = new Car();
Part clutch = new Part();
clutch.setCar( corolla );
Part bumper = new Part();
bumper.setCar( corolla );
em.persist( corolla );
em.persist( clutch );
em.persist( bumper );
em.getTransAction().commit();
但这不会删除数据库中从零件到汽车的链接:

tx.begin();
corolla.getParts().clear();
tx.commit();
为什么会这样

提前谢谢,如果这是一个愚蠢的问题,我很抱歉

迈克

车辆等级:

@Entity
public class Car {

private Long id;
private Set<Part> parts;

....

public Car() { parts = new HashSet<Part>(); }

@Id
@GeneratedValue( generator="increment" )
@GenericGenerator( name="increment", strategy = "increment" )
public Long getId() { return id; }
private void setId( Long id ) { this.id = id; }

@OneToMany( mappedBy="car", cascade=CascadeType.ALL )
public Set<Part> getParts() { return this.parts; }
public void setParts( Set<Part> parts ) { this.parts = parts; }

....

}

但是,从数据库中删除实体时,您应该使用以下方法:

EntityManager.remove

但是,从数据库中删除实体时,您应该使用以下方法:

EntityManager.remove

当双向关系的双方不一致时,拥有方(即没有
mappedBy
的一方)的状态将持久化到数据库。因此,您需要一致地修改两侧:

for (Part p: corolla.getParts()) {
    p.setCar(null);
}
corolla.getParts().clear();

当双向关系的双方不一致时,拥有方(即没有
mappedBy
的一方)的状态将持久化到数据库。因此,您需要一致地修改两侧:

for (Part p: corolla.getParts()) {
    p.setCar(null);
}
corolla.getParts().clear();

我不认为这是我一直在寻找的:我不想删除数据库中的部件,而是要删除它们与特定汽车的关联。谢谢,虽然:)我不认为这是我一直在寻找的:我不想删除的部分从数据库,而是删除他们与特定的汽车。不过,谢谢你:)我需要的是关于拥有方的坚持。非常感谢!我需要的是关于拥有方被持久化的一点。非常感谢!axtavt(以下)的回答,加上duffymo对本帖的回答中关于在对象设计中嵌入关系的部分帮助我解决了这个问题。axtavt(以下)的回答,加上duffymo对本帖的回答中关于在对象设计中嵌入关系的部分帮助我解决了这个问题。