rc3 - Spring Roo, Hibernate, una relación de uno a muchos crea una tabla adicional
spring roo tutorial (1)
No estoy seguro de cómo Roo logra esto, pero necesita vincular los lados de las relaciones bidireccionales con mappedBy
:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "owner")
private Set<Car> ownedCars = new HashSet<Car>();
De lo contrario, se interpretan como dos relaciones unidireccionales diferentes, y la relación de Person
a Car
se implementa a través de la tabla de unión (es un comportamiento predeterminado para las relaciones unidireccionales de uno a muchos).
Soy nuevo en spring mvc, roo e hibernate.
Intento crear dos tablas con relación 1: M.
Por ejemplo, quiero dos entidades, Person y Car. Una persona puede tener muchos autos.
Creé entidades usando 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
Clase generada para el automóvil:
@RooJavaBean
@RooToString
@RooEntity
public class Car {
private String Name;
@ManyToOne
private Person owner;
}
Clase generada para la persona
@RooJavaBean
@RooToString
@RooEntity
public class Person {
private String Name;
@OneToMany(cascade = CascadeType.ALL)
private Set<Car> ownedCars = new HashSet<Car>();
}
Sin embargo, en la base de datos, hay 3 tablas (en lugar de dos)
Tabla CAR (como se esperaba)
CREATE TABLE "TEST"."CAR"
(
"ID" NUMBER(19,0),
"NAME" VARCHAR2(255 BYTE),
"VERSION" NUMBER(10,0),
"OWNER" NUMBER(19,0)
)
Tabla PERSONA (como se esperaba)
CREATE TABLE "TEST"."PERSON"
(
"ID" NUMBER(19,0),
"NAME" VARCHAR2(255 BYTE),
"VERSION" NUMBER(10,0)
)
y también PERSON_OWNED_CARS (que no se espera, no es una relación de muchos a muchos)
CREATE TABLE "TEST"."PERSON_OWNED_CARS"
(
"PERSON" NUMBER(19,0),
"OWNED_CARS" NUMBER(19,0)
)
¿Por qué se genera la última tabla? ¿Cuál es el propósito de la última tabla, no es una relación de muchos a muchos? ¿Se puede evitar? ¿Estoy haciendo algo mal?