我使用 Hibernate Annotations 映射表,但我想移动到 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。