我正在使用 JPA(休眠)、EJB 和 CDI bean(JSF)。我有两个表:具有多对多关系的技术(实体是 Technology.class)和组件(实体是 Component.class)。实体代码:
public class Technology implements Serializable{
...
@Lob
@Column(nullable=false)
private String title;
...
@ManyToMany(mappedBy="technologies")
private List<Component> components;
..
}
public class Component implements Serializable {
...
@ManyToMany
@JoinTable(
name="technology_has_component"
, joinColumns={
@JoinColumn(name="component_title", nullable=false)
}
, inverseJoinColumns={
@JoinColumn(name="technology_tId", nullable=false)
}
)
private List<Technology> technologies;
...
}
EJB 中的代码:
@Stateless
@LocalBean
public void addTech(Technology tech) throws Exception {
em.persist(tech);
}
我的 JSF 页面使用具有属性和方法的 CDI bean:
@Named(value = "adminActionTech")
@SessionScoped
public class AdminActionTech implements Serializable{
...
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String addTech() {
Technology tech = new Technology();
tech.setTitle(title);
...
tech.setComponents(getListAvaiComps());
try {
techService.addTech(tech);
} catch (Exception e) {
e.printStackTrace();
}
}
private List<Component> getListAvaiComps() {
List<Component> listNewComponent = new ArrayList<Component>();
Component findComp = compService.findComp(component.getTitle()); // findComp() is a method in a EJB
listNewComponent.add(findComp);
return listNewComponent;
}
当我添加带有标题的新技术时,....,列出组件。一切都很好,除了没有添加列表组件。我检查了技术表,创建了一条新记录,但 technology_has_component 表没有添加更多记录。我调试并确定 getListAvailComps 方法不为空。你能告诉我如何解决。谢谢