我正在使用 Java EE JSP/EJB3,但在实现表之间的关系时遇到问题。最初我正在考虑存储 id,但我读过它会破坏 EJB 存储对对象的引用的目的
作为解释我的问题的测试示例,我想出了一个汽车模型和汽车品牌关系。在此 Web 应用程序中,用户首先创建品牌。然后创建汽车并从下拉列表中选择品牌。
Car ->rand:多对一 Brand->Car:一对多
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;
...
}
鉴于以上是正确的(我不确定)
处理这些输入的最佳做法是什么
可以说我有这个html(如果选择必须不同,请告诉)
<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 到实体对象 Brand 的转换是在哪里完成的?在会话 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);
}
提前致谢