Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate onetomany单向,使用jpa进行连接设置_Hibernate_Jpa_Ejb_Jboss7.x - Fatal编程技术网

Hibernate onetomany单向,使用jpa进行连接设置

Hibernate onetomany单向,使用jpa进行连接设置,hibernate,jpa,ejb,jboss7.x,Hibernate,Jpa,Ejb,Jboss7.x,我有两个实体,一个是客户,一个是订单。 一个客户可以有多个订单。 因为我需要这种关系是单向的,所以我使用了一个joinTable 我能够使用JPA向我的客户实体添加条目。 我可以使用JPA向订单实体添加条目 我想知道如何将这两个数据连接在一起。 假设客户表中有一个条目,订单表中有两个条目。 我想将订单表中的这两个条目与客户表中的一个条目相关联 目前,我在jointable customer_订单中没有看到任何条目。我如何建立这个协会?我想,当我将订单添加到订单表中时,我必须以某种方式提及客户id

我有两个实体,一个是客户,一个是订单。 一个客户可以有多个订单。 因为我需要这种关系是单向的,所以我使用了一个joinTable

我能够使用JPA向我的客户实体添加条目。 我可以使用JPA向订单实体添加条目

我想知道如何将这两个数据连接在一起。 假设客户表中有一个条目,订单表中有两个条目。 我想将订单表中的这两个条目与客户表中的一个条目相关联

目前,我在jointable customer_订单中没有看到任何条目。我如何建立这个协会?我想,当我将订单添加到订单表中时,我必须以某种方式提及客户id号。我不知道该怎么做。在JPA中是否有一个标准查询

谢谢

客户类别-

@Entity
public class Customer implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "generatorCustomer")
    @TableGenerator(name = "generatorCustomer", allocationSize = 1)
    @Column(name="customer_id")
    private Long id;
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @OneToMany()
    @JoinTable (
        name="customer_order",
        joinColumns={ @JoinColumn(name="customer_id", referencedColumnName="customer_id") },
        inverseJoinColumns={ @JoinColumn(name="order_id", referencedColumnName="order_id", unique=true) }
    )
    private List<Order> orderList = new ArrayList<Order>();
    public List<Order> getOrderList() {
        if(this.orderList == null) {
            this.orderList = new ArrayList<Order>();
        }
        return this.orderList;
    }

    public void setOrderList(List<Order> orderList) {
        this.orderList = orderList;
    }

    public void addOrder(Order order) {
        this.orderList.add(order);
    }

    /* other logic follows......... */
}
@Entity
public class Order implements Serializable {
@Id
@GeneratedValue
@Column(name="order_id")
private Long id;
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

/* other logic follows......... */
}
客户表说明:

jbossql=# \d customer
Column   |         Type          |                        Modifiers
-------------+-----------------------+---------------------------------------------------------------
customer_id | bigint                | not null default nextval('customer_customer_id_seq'::regclass)
name        | character varying(50) | 
Indexes:
"customer_pkey" PRIMARY KEY, btree (customer_id)
Referenced by:
TABLE "customer_order" CONSTRAINT "fk8ef2f420ec016855" FOREIGN KEY (customer_id) REFERENCES customer(customer_id)
jbossql=# \d order
Column   |  Type  | Modifiers 
------------+--------+-----------
order_id   | bigint | not null
value      | real   | 
Indexes:
"order_pkey" PRIMARY KEY, btree (order_id)
Referenced by:
TABLE "customer_order" CONSTRAINT "fk1e4828a98187660" FOREIGN KEY (order_id) REFERENCES order(order_id)
jbossql=# \d customer_order
Column       |  Type  | Modifiers 
--------------+--------+-----------
customer_id  | bigint | not null
order_id     | bigint | not null
Indexes:
"customer_order_order_id_key" UNIQUE CONSTRAINT, btree (order_id)
Foreign-key constraints:
"fk1e4828a98187660" FOREIGN KEY (order_id) REFERENCES order(order_id)
"fk1e4828adba386b8" FOREIGN KEY (customer_id) REFERENCES customer(customer_id)
订单表说明:

jbossql=# \d customer
Column   |         Type          |                        Modifiers
-------------+-----------------------+---------------------------------------------------------------
customer_id | bigint                | not null default nextval('customer_customer_id_seq'::regclass)
name        | character varying(50) | 
Indexes:
"customer_pkey" PRIMARY KEY, btree (customer_id)
Referenced by:
TABLE "customer_order" CONSTRAINT "fk8ef2f420ec016855" FOREIGN KEY (customer_id) REFERENCES customer(customer_id)
jbossql=# \d order
Column   |  Type  | Modifiers 
------------+--------+-----------
order_id   | bigint | not null
value      | real   | 
Indexes:
"order_pkey" PRIMARY KEY, btree (order_id)
Referenced by:
TABLE "customer_order" CONSTRAINT "fk1e4828a98187660" FOREIGN KEY (order_id) REFERENCES order(order_id)
jbossql=# \d customer_order
Column       |  Type  | Modifiers 
--------------+--------+-----------
customer_id  | bigint | not null
order_id     | bigint | not null
Indexes:
"customer_order_order_id_key" UNIQUE CONSTRAINT, btree (order_id)
Foreign-key constraints:
"fk1e4828a98187660" FOREIGN KEY (order_id) REFERENCES order(order_id)
"fk1e4828adba386b8" FOREIGN KEY (customer_id) REFERENCES customer(customer_id)
客户订单联合表格说明:

jbossql=# \d customer
Column   |         Type          |                        Modifiers
-------------+-----------------------+---------------------------------------------------------------
customer_id | bigint                | not null default nextval('customer_customer_id_seq'::regclass)
name        | character varying(50) | 
Indexes:
"customer_pkey" PRIMARY KEY, btree (customer_id)
Referenced by:
TABLE "customer_order" CONSTRAINT "fk8ef2f420ec016855" FOREIGN KEY (customer_id) REFERENCES customer(customer_id)
jbossql=# \d order
Column   |  Type  | Modifiers 
------------+--------+-----------
order_id   | bigint | not null
value      | real   | 
Indexes:
"order_pkey" PRIMARY KEY, btree (order_id)
Referenced by:
TABLE "customer_order" CONSTRAINT "fk1e4828a98187660" FOREIGN KEY (order_id) REFERENCES order(order_id)
jbossql=# \d customer_order
Column       |  Type  | Modifiers 
--------------+--------+-----------
customer_id  | bigint | not null
order_id     | bigint | not null
Indexes:
"customer_order_order_id_key" UNIQUE CONSTRAINT, btree (order_id)
Foreign-key constraints:
"fk1e4828a98187660" FOREIGN KEY (order_id) REFERENCES order(order_id)
"fk1e4828adba386b8" FOREIGN KEY (customer_id) REFERENCES customer(customer_id)
我可以在customer表中插入一个项目:

jbossql=# select * from customer;
customer_id | name 
-------------+-------------
1        | joe
(1 row)
我还可以将项目插入订单表:

jbossql=# select * from order;
order_id | value 
----------+-----------
1       |  1.8
2       |  0.5
(2 rows)
我在想customer_order表会自动填充,即hibernate会自动填充。但并非因为我的jointable为空而出现:

jbossql=# select * from customer_order;
customer_id | order_id 
-------------+-----------
(0 rows)
所以,我的意图是将这两个订单条目连接到customer joe

请帮忙

  • 我是否必须向customer_order表中显式添加记录
  • 如果没有,我如何将项目插入订单表,以便将该条目连接到特定客户
  • 我的映射在java文件中是否正确,以使此OneToMany[单向]关系按预期工作
  • 我正在使用JPA2、JBoss和Hibernate。您是否有任何代码引用来测试一对多关系?任何完整项目的参考资料或阅读材料都会有所帮助
  • 感谢您的关注。

    非常简单:

    customer.addOrder(order);
    

    这就是你所需要的。这就是ORM的原理。您操作对象,ORM使用您定义的映射将其保存在数据库中。

    您必须将级联属性添加到@OneToMany注释中:
    @OneToMany(cascade=CascadeType.ALL)

    您可以在此处看到可用于级联的所有类型的操作:

    在这里,您可以阅读有关级联属性的更多信息:


    您不需要显式插入客户订单。

    您可以向我们展示您的映射吗?@overmeulen Hello,添加了所有可能有助于您帮助我的相关信息。再次谢谢。我是直接向order对象实例添加记录的。当记录发送给客户时,订单参数的数据为空-我的情况是,我必须先创建客户,然后在将来的某个时候将订单记录添加到该客户。因此,我的customer类构造函数没有考虑order对象。我还想说,我必须在Customer类中使用的OneToMany注释上使用CascadeType.ALL。再次谢谢你的小费。