使用JPA和Play Framework映射订单

时间:2012-04-03 10:01:34

标签: jpa playframework

我正在使用Play框架1.2.4,我正在准备一个订餐系统。所以我想把它们放在地图上。

package models;

import java.util.ArrayList;
import java.util.Date;
import java.util.Map;

import javax.persistence.Entity;
import javax.persistence.ManyToMany;

import play.db.jpa.Model;

@Entity
public class Order extends Model{


Map<Item, Float> orders;

Table table;
Date date;  

public Order(Map<Item, Float> orders, Table table) {
    super();
    this.orders = orders;
    this.table = table;
    date = new Date();
}

}

但是,当我启动应用程序时,它会出现此错误,

JPA错误 发生JPA错误(无法构建EntityManagerFactory):无法确定类型:java.util.Map,在表:订单,列:[org.hibernate.mapping.Column(orders)]

我如何存储1 porsion pizza,1.5 porsion soup等订单。

3 个答案:

答案 0 :(得分:2)

如果您希望由jpa管理

,则需要对地图进行注释
@ElementCollection
Map<Item, Float> orders;

答案 1 :(得分:1)

您必须使用@Table注释更改实体Order的表名。在许多DBMS中,“order”是一个保留字。

@Entity
@Table(name="apporder")
public class Order extends Model {
    // ...
}

关于订单商品:您需要其他实体来存储此数据。例如:

OrderItem.java

package models;

import java.util.*;
import javax.persistence.*;

import play.db.jpa.*;
import play.data.validation.*;

@Entity
public class OrderItem extends Model {

    @ManyToOne
    public Order order;

    @ManyToOne
    public Item item;

    public Float qty;

}

答案 2 :(得分:1)

使用 float (帮助数量)和项目(正在投放的内容)添加服务类。然后将 Set&lt; Serving&gt; 添加到Order类。对于这样的信息,比地图更有意义。