Emi*_*mir 15 hibernate spring-mvc spring-roo
我刚开始玩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)
   )
表PERSON(如预期)
  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)
   )
为什么生成最后一个表?最后一张桌子的目的是什么,关系不多?可以避免吗?难道我做错了什么?
axt*_*avt 20
我不确定Roo是如何管理这个的,但你需要将双向关系的各个方面与mappedBy以下内容联系起来:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "owner")
private Set<Car> ownedCars = new HashSet<Car>();
否则,它们将被解释为两个不同的单向关系,从关系Person到Car通过实现连接表(它是单向的一个一对多的关系的默认行为).
| 归档时间: | 
 | 
| 查看次数: | 10848 次 | 
| 最近记录: |