gpt4 book ai didi

hibernate - Spring Roo、Hibernate、一对多关系创建附加表

转载 作者:行者123 更新时间:2023-12-03 20:26:13 25 4
gpt4 key购买 nike

我是 spring mvc、roo 和 hibernate 的新手。

我正在尝试创建两个具有 1:M 关系的表。

例如,
我想要两个实体,Person 和 Car。一个人可以有很多辆车。

我使用 Roo 创建了实体

entity --class ~.domain.Person
field string Name
entity --class ~.domain.Car
field string Name
field reference --fieldName owner --type ~.domain.Person
field set --fieldName ownedCars --type ~.domain.Car --class ~.domain.Person --cardinality ONE_TO_MANY

生成的汽车类:
@RooJavaBean
@RooToString
@RooEntity
public class Car {

private String Name;

@ManyToOne
private Person owner;
}

为 Person 生成的类
@RooJavaBean
@RooToString
@RooEntity
public class Person {

private String Name;

@OneToMany(cascade = CascadeType.ALL)
private Set<Car> ownedCars = new HashSet<Car>();
}

但是,在数据库中,有 3 个表(插入了两个)

表 CAR(如预期)
  CREATE TABLE "TEST"."CAR" 
(
"ID" NUMBER(19,0),
"NAME" VARCHAR2(255 BYTE),
"VERSION" NUMBER(10,0),
"OWNER" NUMBER(19,0)
)

表人(如预期)
  CREATE TABLE "TEST"."PERSON" 
(
"ID" NUMBER(19,0),
"NAME" VARCHAR2(255 BYTE),
"VERSION" NUMBER(10,0)
)

还有 PERSON_OWNED_CARS(这是意料之中的,不是多对多的关系)
  CREATE TABLE "TEST"."PERSON_OWNED_CARS" 
(
"PERSON" NUMBER(19,0),
"OWNED_CARS" NUMBER(19,0)
)

为什么生成最后一个表?最后一张表的目的是什么,不是多对多的关系吗?可以避免吗?难道我做错了什么?

最佳答案

我不确定 Roo 是如何管理这个的,但您需要将双向关系的双方与 mappedBy 联系起来。 :

@OneToMany(cascade = CascadeType.ALL, mappedBy = "owner")
private Set<Car> ownedCars = new HashSet<Car>();

否则,它们将被解释为两个不同的单向关系,以及来自 Person 的关系。至 Car通过连接表实现(这是单向一对多关系的默认行为)。

关于hibernate - Spring Roo、Hibernate、一对多关系创建附加表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5165743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com