簡體   English   中英

休眠-從注釋到XML配置文件

[英]Hibernate - from Annotations to XML Configuration files

我使用了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。

像這樣,參見8.5。 與聯接表的雙向關聯

<class name="com.bontade.mvc.models.Car" table="CARS">
    ...
    <join table="USER_CAR" 
        inverse="true" 
        optional="true">
        <key column="CAR_ID"/>
        <many-to-one name="owner"
            column="USER_ID"
            not-null="true"/>
    </join>
</class>

<class name="com.bontade.mvc.models.User" table="USERS">
    ...
    <list name="cars" inverse="false" table="USER_CAR" lazy="true">
        <key>
            <column name="CAR_ID" />
        </key>
        <many-to-many column = "USER_ID" unique = "true" 
            class="com.bontade.mvc.models.Car" />
    </list>
</class>

這樣的事情應該出現在用戶定義中。

  <join table="USER_CAR" optional="true">
    <key column="user_id" unique="true"/>
    <many-to-one name="car" column="car_id" not-null="true"/>
  </join>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM