数据库里有3张表。
第一个(类别)包括:id,category,isactive
第二个(菜单)包括:parentid和childid。
第三项包括:身份证、姓名和价格。
第一个表和第二个表有关系。我现在想做第二和第三的关系。
第二个表在数据库中有这些值:
7(身份证)、1(姓名)、120(价格)
7(身份证)、2(姓名)、100(价格)
8(ID)、CAR1(名称)、1620(价格)
8(身份证)、2(姓名)、520(价格)
8(身份证)、3(姓名)、5520(价格)
9(身份证),1号楼(名称),10000(价格)
9(身份证),2号楼(名称),11000(价格)
9(身份证),3号楼(名称),15000(价格)
目前,我已将列childid连接到列id。
menu.java菜单

@EmbeddedId MenuId id;

@Column(name="PARENTID")
private Integer parentid;

@Column(name="CHILDID")
private Integer childid;

@OneToOne
@JoinColumn(name="CHILDID",referencedColumnName="ID")

private Categories subcategories;

public Categories getSubcategories() {
    return this.subcategories;
}

public void setSubategories(Categories subcategories) {
    this.subcategories = subcategories;
}

@OneToOne
@JoinColumn(name="PARENTID", referencedColumnName="ID")
private Categories categories;

public Categories getCategories() {
    return this.categories;
}

public void setCategories(Categories categories) {
    this.categories = categories;
}

@OneToOne
@JoinColumn(name="CHILDID",referencedColumnName="ID")
private Items items;
public Items getItems() {
    return this.items;
}

public void setItems(Items items) {
    this.items = items;
}

items.java也没有修改为subcategories.java
我正在使用json对象打印我的值:
jsonObject.put("parentid", menu.getParentid());
jsonObject.put("childid", menu.getChildid());
jsonObject.put("categories", menu.getCategories().getCategory());
jsonObject.put("subcategories", menu.getSubcategories().getCategory());
jsonObject.put("itemid", menu.getItems().getId());
jsonObject.put("product", menu.getItems().getProduct());
jsonObject.put("brand", menu.getItems().getBrand());
jsonObject.put("sum", menu.getItems().getSum());

它起作用了,但它并不像我在项目中想象的那样起作用。它只打印相同的值:
7(身份证)、1(姓名)、120(价格)
7(身份证)、1(姓名)、120(价格)
8(ID)、CAR1(名称)、1620(价格)
8(ID)、CAR1(名称)、1620(价格)
8(ID)、CAR1(名称)、1620(价格)
9(身份证),1号楼(名称),10000(价格)
9(身份证),1号楼(名称),10000(价格)
9(身份证),1号楼(名称),10000(价格)
等等…但不是这个:
7(身份证)、1(姓名)、120(价格)
7(身份证)、2(姓名)、100(价格)
8(ID)、CAR1(名称)、1620(价格)
8(身份证)、2(姓名)、520(价格)
8(身份证)、3(姓名)、5520(价格)
9(身份证),1号楼(名称),10000(价格)
9(身份证),2号楼(名称),11000(价格)
9(身份证),3号楼(名称),15000(价格)
所以我的问题是我应该使用@onetomany方法吗?还是我做错事了?

最佳答案

使用@OneToOne就像为某些行扩展表(更多列)。
似乎您正在尝试为订单/账单和订单/账单的位置建立关系模型。
通常(至少我会这样做)您为订单创建一个“父”表。

table order:
---------------
oder_id | customer | date | ...
--------+----------+------+-----
    1   |  cust_1  | ...  | ...
    2   |  cust_3  | ...  | ...

您的订单位置在“子”表的订单位置。外键约束(order_position.order_id to order.order_id)确保数据完整性。
table order_position:
-----------------------
 id | oder_id | item     | price | ...
----+---------+----------+-------+-----
  1 |     1   |  book_1  | 100   | ...
  2 |     1   |  book_2  | 200   | ...
  3 |     2   |  car_1   | 2500  | ...
  4 |     2   |  car_2   | 234   | ...

最后回答您的问题:是的,在jpa中,您应该在order实体中使用@OneToMany,在orderposition实体中使用ManyToOne(如果您想要双向关系)。查看ObjectDB-Wiki中的示例

07-24 21:10