2016-04-23 87 views
1

我正在努力探索JPA 2.1的新功能, EntityGraph功能通过使用产品,采购订单和订单项目之间的样本关系进行样本CRUD操作。带有提示和命名查询的Jpa实体图形

下面我主做豆腐的代码,我定义了一个命名查询检索所有数据,以及实体图形

@Entity 
@Table(name = "purchase_order") 
@NamedQueries({ 
@NamedQuery(name = "Order.findAll", query = "SELECT o FROM Order o")}) 
@NamedEntityGraph(name = "graph.Order.items", attributeNodes =  @NamedAttributeNode(value = "items", subgraph = "items"), 
subgraphs = @NamedSubgraph(name = "items", attributeNodes = @NamedAttributeNode("product"))) 

public class Order implements Serializable { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "id", updatable = false, nullable = false) 
private Long id = null; 

@Version 
@Column(name = "version") 
private int version = 0; 

@Column 
private String orderNumber; 

@OneToMany(mappedBy = "order", fetch = FetchType.LAZY) 
private Set<OrderItem> items = new HashSet<OrderItem>(); 
... getter and setter methods 

我想打电话给命名查询和图形从DAO方法我已经为下

public List<Order> getOrderDetails() { 
    return (List<Order>) entityManager.createNamedQuery("Order.findAll").setHint("javax.persistence.loadgraph", 
      entityManager.getEntityGraph("graph.Order.items")).getResultList(); 
} 

虽然数据库包含许多行,虽然我试图改变提示调用DAO方法的结果返回零指数在“javax.persistence.fetchgraph”和“javax.persistence.loadgraph”之间请指教。

回答

0

我自己发现了这个问题,对不起,我发现上面的cod块很好,图和子图都很好定义,但是hbm2ddl正在删除我的数据,因为它的值是创建的,使得它可以从数据库删除并重新创建它。

<property name="hibernate.hbm2ddl.auto" value="create"/>