我目前正在將JPA實體中沒有JPA/Hibernate經驗的人創建的100多個Java對象工作。它們的對象基於類中的外鍵引用其他對象。所有主鍵均在數據庫之外生成。Hibernate/JPA - 對象本身的外鍵索引
,例如(只是爲了說明)
汽車
@Entity
@Table(name="CAR")
public class Car {
private Integer id;
private String name;
@Id
@Column(name="CAR_ID")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="CAR_NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
引擎
@Entity
@Table(name="ENGINE")
public class Engine {
private Integer id;
private String name;
private Integer carId;
@Id
@Column(name="ENGINE_ID")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="ENGINE_NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="CAR_ID")
public Integer getCarId() {
return carId;
}
public void setCarId(Integer carId) {
this.carId = carId;
}
}
這裏的架構是什麼樣子:
CREATE TABLE CAR(CAR_ID INTEGER NOT NULL PRIMARY KEY,CAR_NAME VARCHAR(255))
CREATE TABLE ENGINE(ENGINE_ID INTEGER NOT NULL PRIMARY KEY,CAR_ID INTEGER,ENGINE_NAME VARCHAR(255))
ALTER TABLE ENGINE ADD FOREIGN KEY (CAR_ID) REFERENCES CAR(CAR_ID) ON DELETE CASCADE ON UPDATE CASCADE
測試代碼
Car c = new Car();
c.setId(100);
c.setName("Dodge Intrepid");
em.persist(c);
Engine e = new Engine();
e.setId(999);
e.setName("V6");
e.setCarId(c.getId());
em.persist(e);
Object entity = em.find(c.getClass(),c.getId());
em.remove(entity);
因此,汽車ID保存在數據庫引擎的參考。丟失延遲加載不是什麼大問題,因爲我們使用的是TRANSACTIONAL實體管理器。我已經測試過了,它似乎工作正常。
這是我有什麼明顯的問題,我失蹤了? 我知道它並不完全符合JPA/Hibernate規範,但我認爲它可行。
用id關係替換對象引用後你的收益是多少? –
這個好處是,我不必經過並更新100多個對象來使用@OneToOne或@OneToMany註釋 – systemoutprintln