Я использовал аннотации Hibernate для таблиц сопоставления, но я хотел перейти на файлы сопоставления xml (* hbm.xml), и у меня возникли некоторые проблемы.У меня есть 4 таблицы (пользователи, автомобили, аренда, user_car) и 3 класса (пользователь, автомобиль, прокат)
Пользователь
@Entity
@Table(name = "USERS")
@SuppressWarnings("serial")
public class User implements Serializable {
private Long id;
private List<Car> cars;
@Id
@GeneratedValue
@Column(name = "ID")
public Long getId() {
return id;
}
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "USER_CAR", joinColumns = { @JoinColumn(name = "CAR_ID") }, inverseJoinColumns = { @JoinColumn(name = "USER_ID", referencedColumnName = "ID") })
public List<Car> getCars() {
return cars;
}
...
}
Автомобиль
@Entity
@Table(name = "CARS")
@SuppressWarnings("serial")
public class Car implements Serializable {
private Long id;
private User owner;
@Id
@GeneratedValue
@Column(name = "ID")
public Long getId() {
return id;
}
@OneToOne(cascade = CascadeType.ALL)
@JoinTable(name = "USER_CAR", joinColumns = { @JoinColumn(name = "CAR_ID", referencedColumnName = "ID") }, inverseJoinColumns = { @JoinColumn(name = "USER_ID") })
public User getOwner() {
return owner;
}
...
}
Прокат
@Entity
@Table(name = "RENTALS")
@SuppressWarnings("serial")
public class Rental implements Serializable {
private Long id;
private Car car;
private User user;
private Date date;
@Id
@GeneratedValue
@Column(name = "ID")
public Long getId() {
return id;
}
@ManyToOne
@JoinColumn(name = "CAR_ID")
public Car getCar() {
return car;
}
@ManyToOne
@JoinColumn(name = "USER_ID")
public User getUser() {
return user;
}
@Column(name = "RENT_DATE", nullable=false)
@Temporal(TemporalType.DATE)
public Date getDate() {
return date;
}
...
}
Созданные Eclipse файлы сопоставления, и я сделал некоторые улучшения
Автомобиль
<hibernate-mapping>
<class name="com.bontade.mvc.models.Car" table="CARS">
<id name="id" type="java.lang.Long">
<column name="ID" />
<generator class="assigned" />
</id>
<many-to-one name="owner" class="com.bontade.mvc.models.User" fetch="join">
<column name="USER_CAR" />
</many-to-one>
</class>
</hibernate-mapping>
Пользователь
<hibernate-mapping>
<class name="com.bontade.mvc.models.User" table="USERS">
<id name="id" type="java.lang.Long">
<column name="ID" />
<generator class="assigned" />
</id>
<property name="name" not-null="true" length="100" type="java.lang.String">
<column name="NAME" />
</property>
<list name="cars" inverse="false" table="CAR" lazy="true">
<key>
<column name="ID" />
</key>
<list-index></list-index>
<one-to-many class="com.bontade.mvc.models.Car" />
</list>
</class>
</hibernate-mapping>
Прокат
<hibernate-mapping>
<class name="com.bontade.mvc.models.Rental" table="RENTALS">
<id name="id" type="java.lang.Long">
<column name="ID" />
<generator class="assigned" />
</id>
<many-to-one name="car" class="com.bontade.mvc.models.Car" fetch="join">
<column name="CAR_ID" />
</many-to-one>
<many-to-one name="user" class="com.bontade.mvc.models.User" fetch="join">
<column name="USER_ID" />
</many-to-one>
<property name="date" type="java.util.Date">
<column name="RENT_DATE" />
</property>
</class>
</hibernate-mapping>
Но я не знаю, как мне объявить и подключить таблицу прокси USER_CAR.