带有提示和命名查询的Jpa实体图

时间:2016-04-23 21:43:36

标签: java spring hibernate jpa query-hints

我正在尝试使用spring ex探索JPA 2.1的新功能。 EntityGraph功能是通过使用产品,采购订单和订单商品之间的样本关系进行样本CRUD操作。

下面是我为主bean编写的代码,我定义了一个命名查询来检索所有数据,实体图

@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方法的结果返回零索引,尽管数据库包含很多行,尽管我试图更改&#34; javax.persistence.fetchgraph&#34;之间的提示。和&#34; javax.persistence.loadgraph&#34;请建议。

1 个答案:

答案 0 :(得分:0)

我自己发现了这个问题,抱歉,因为我发现上面的鳕鱼块很好,图形和子图很好定义,但是hbm2ddl正在丢弃我的数据,因为它的值是create,它使得从数据库中删除虚拟数据删除并再次创建它。

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