【发布时间】:2015-01-27 16:03:59
【问题描述】:
我有以下实体结构。
@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();
这是输出。我无法理解更新声明。当我持久化大量对象时,这对我来说是一个性能问题。
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 配置
标签: java hibernate jpa entitymanager