我正在使用Java EE JSP/EJB3,並且在執行表之間的關係時遇到問題。最初我在考慮存儲這個id,但是我讀過它會打敗存儲對象引用的EJB的目的EJB3映射/ onetomany/manytoone如何處理關係
作爲一個解釋我的問題的測試示例,我提出了一個汽車模型和汽車品牌關係。在此Web應用程序中用戶首先創建品牌。然後創建汽車並從下拉列表中選擇品牌。
汽車 - >蘭特:多對一 品牌 - >汽車:一對多
public class Brand implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private long id;
@Column(name="brand_name")
private String brand_name;
@Column(name="cars_fk")
private Set<Car> cars;
...
}
以下是該車的EntityBean
public class Car implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private long id;
private Brand brand;
@ManyToOne(fetch = FetchType.LAZY)
@Column(name="brand_FK")
private Brand brand;
...
}
鑑於上面是正確的(我我不確定)
什麼是處理這些輸入的最佳實踐
可以說我有這個網站(如果選擇必須是不同的,請不要告訴)
<form action="processCar.jsp">
Model: <input type="text" name="title"><br>
<select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
<input type="submit" value="Submit">
</form>
選項從Brand.findAll加載的品牌。
此外,如果這是正確的,從品牌名稱/ ID到實體對象品牌的轉換是從哪裏完成的?在會話bean?
public void createCar(String title,String brandname){
Query query = em.createNamedQuery("Brand.getBrandbyName");
query.setParameter("brand_name", brandname);
Brand brand = (Brand)query.getSingleResult();
carSLSBManagement.create(title,brand);
}
在此先感謝
您在'Brand'中的'cars'字段的聲明看起來不正確。它是'@ OneToMany',這意味着它不能使用'@ Column',因爲在實體的表中不會有單列。相反,你應該說'@OneToMany(mappedBy =「品牌」)',並且由'Car'實體的表中的'brand'字段驅動。 –