gpt4 book ai didi

java - EJB3 Mappings/onetomany/manytoone 如何处理关系

转载 作者:行者123 更新时间:2023-12-01 04:59:34 24 4
gpt4 key购买 nike

我正在使用 Java EE JSP/EJB3,但在实现表之间的关系时遇到问题。最初我考虑存储 id,但我了解到这会违背 EJB 存储对象引用的目的

作为解释我的问题的测试示例,我提出了汽车型号和汽车品牌关系。在此 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;
...

}

鉴于上述内容是否正确(我不确定)

处理这些输入的最佳实践是什么

假设我有这个 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 的转换是在哪里完成的?在 session 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);
}

提前致谢

最佳答案

通常的方法是使用 ID 作为下拉列表中的值,然后在接收请求的代码中尽快将其转换为对象。那将是一个 servlet 或等效物,而不是一个 bean。该 bean 应该与已经获取的对象一起工作。

如果您有品牌 ID,那么获取它就很简单:

long brandId = Long.parseLong(request.getParameter("brandId"));
Brand brand = em.find(Brand.class, brandId);

我要补充一点,虽然我的偏好是在 Web 层进行所有参数解析和解码,但在进入领域层之前,出于技术原因,将其中一些参数向下推送到领域可能会更方便层。例如,当您执行 em.find 时,您应该打开一个事务,并且如果您使用带有 servlet 和 EJB 的经典 Java EE 架构,那么事务自然会从 EJB 开始,并带有 servlet是非交易性的。为了适应这一点,您可以在 servlet 中将 ID 解析为 long,但在 EJB 中获取对象。这有点笨拙,但这确实意味着您不必处理事务。

关于java - EJB3 Mappings/onetomany/manytoone 如何处理关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13560941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com