java - JPA加入专栏

标签 java jquery mysql database jpa

我在数据库中有 3 个表。

第一个(categories)包括:id, category, isactive

第二个(菜单)包括:parentid和childid。

第三个(items)包括:id,name,price。

第一个表与第二个表有关系。我现在想做第二和第三之间的关系。

第二个表在数据库中有这些值:

  • 7(id), book1(name), 120(price)
  • 7(id), book2(name), 100(price)
  • 8(id), car1(名字), 1620(价格)
  • 8(id), car2(名字), 520(价格)
  • 8(id), car3(名字), 5520(价格)
  • 9(id), house1(name), 10000(price)
  • 9(id), house2(名字), 11000(价格)
  • 9(id), house3(name), 15000(price)

目前我已将列 childid 加入到列 id。

菜单.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(id), book1(name), 120(price)
  • 7(id), book1(name), 120(price)
  • 8(id), car1(名字), 1620(价格)
  • 8(id), car1(名字), 1620(价格)
  • 8(id), car1(名字), 1620(价格)
  • 9(id), house1(name), 10000(price)
  • 9(id), house1(name), 10000(price)
  • 9(id), house1(name), 10000(price)

等等...但不是这个:

  • 7(id), book1(name), 120(price)
  • 7(id), book2(name), 100(price)
  • 8(id), car1(名字), 1620(价格)
  • 8(id), car2(名字), 520(价格)
  • 8(id), car3(名字), 5520(价格)
  • 9(id), house1(name), 10000(price)
  • 9(id), house2(名字), 11000(价格)
  • 9(id), house3(name), 15000(price)

所以我的问题是我应该使用@OneToMany 方法吗?还是我做错了?

最佳答案

使用 @OneToOne 就像为某些行扩展表格(更多列)。

看起来你正在尝试为订单/账单和订单/账单的位置建立一个关系模型。

通常(至少我会这样做)您会为订单创建一个“父”表。

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

您的订单仓位在“子”表 order_positions 中。外键约束(order_position.order_id 到 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 中,您应该在 Oder-Entity 中使用 @OneToMany,并且(如果您想要双向关系)在 OrderPostion 中使用 ManyToOne -实体。查看 ObjectDB-Wiki 中的示例

关于java - JPA加入专栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31717679/

相关文章:

java - 访问mybatis的Mapper文件中的变量值

javascript - 有没有办法让图像看起来像波浪效果?

java - 是否可以添加另一个字段来查找和过滤 java 中 mongodb 数据库的结果?

java - 在包 'textcolor' 中找不到属性 'android' 的资源标识符

jquery - ie9 中的 Keith Wood Datepick 在点击时不起作用

python - sql 查询的 sql 语法错误

php - ajax图片上传和预览表单

mysql - GROUP BY 列 HAVING COUNT(*) > 1,仍然显示所有行?

java - 如何在 Android Kotlin 中包装异步 Java 库?

javascript - 数据表搜索框