다음 엔티티 구조가 있습니다.엔티티 관리자가 지속되면 불필요한 업데이트가 발생합니다.
@Entity
@Table(name = "vertex")
@Inheritance(strategy = InheritanceType.JOINED)
public class Vertex implements Serializable {
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "vertex_edge", joinColumns = {
@JoinColumn(name = "vertex_id", referencedColumnName = "vertex_id")
}, inverseJoinColumns = {
@JoinColumn(name = "edge_id", referencedColumnName = "edge_id")
})
/** list of neighbor resources. */
private Collection<Edge> edges= new HashSet<Edge>();
public void setVertex(Vertex neighbourVertex)
{ Edge edge = new Edge(this, neighbourVertex);
edges.add(edge);
}
@Entity
@Table(name = "edge")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "edgeType", discriminatorType = DiscriminatorType.STRING)
public abstract class Edge implements Serializable {
/**
*
*/
private static final long serialVersionUID = 8827162781366388321L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "edge_id", nullable = false)
private long edgeID;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "start_vertex_id")
private Vertex start;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "end_vertex_id")
private Vertex end;
}
엔티티를 저장하는 방법 섹션입니다.
EntityManager em = EMFactory.getEM();
em.getTransaction().begin();
Vertex vertex1= new Vertex();
vertex1.setVertex(new Vertex());
em.persist(vertex1);
em.flush();
em.getTransaction().commit();
em.close();
출력됩니다. 업데이트 진술을 이해할 수 없습니다. 거대한 개체 목록을 유지할 때 이것은 성능 문제입니다. 당신이 당신의 edge
객체를 저장할 때
Hibernate: insert into vertex
Hibernate: insert into edge (end_vertex_id, start_vertex_id, edgeType) values (?, ?, 'edgeType1')
Hibernate: insert into vertex
**Hibernate: update edge set end_vertex_id=?, start_vertex_id=? where edge_id=?**
Hibernate: insert into vertex_edge(vertex_id, edge_id) values (?, ?)
는 JPA 구성 난 당신의 코드에 맞춰
<persistence-unit name="DBService"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="javax.persistence.jdbc.user" value="user" />
<property name="javax.persistence.jdbc.password" value="password" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="url of database" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.jdbc.batch_size" value="100" />
value="false" />
</properties>
</persistence-unit>
jpa 구성을 추가 할 수 있습니까? –
추가 된 Jpa 구성 – user725455