ERM to Entity relationship problem
te-bachi Jan 26, 2007 7:46 AMI was developing a C/C++ application and I want to migrate this application to Java EE 5 / EJB 3.0.
I use an oracle database to do persistency. I create 3 entities and mapped it via annotation to a relational database.
My ERM can't be changed anymore, but all this relationship types in the book "EJB 3.0" written by Bill Burke can't applied.
Environment:
o Java 1.5.0_09
o IntelliJ IDEA 6.0.4
o JBoss 4.0.5 AS (JEMS Installer with ejb3)
o Windows XP SP2
o Oracle 10.1.0.4.0 (Solaris 8)
ERM:
Independent Code:
Client (Struts Action):
public class PaymentSearchAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { StringBuffer buffer = new StringBuffer(); try { InitialContext ctx = new InitialContext(); UserTransaction trans = (UserTransaction) ctx.lookup("java:comp/UserTransaction"); trans.begin(); AuditSearch search = (AuditSearch) ctx.lookup("JApollo/AuditSearchBean/local"); AuditSearchTemplateEntity templ = search.getTemplate(BigInteger.valueOf(1)); buffer.append("id: "); buffer.append(templ.getTemplateId()); buffer.append("key: "); buffer.append(templ.getKey()); buffer.append("<br>"); List<AuditSearchAssignEntity> searchAssignList = templ.getSearchAssignList(); // <== Exception raised! AuditSearchAssignEntity searchAssign; AuditSearchCriteriaEntity criteria; for (int i = 0; i < searchAssignList.size(); i++) { searchAssign = searchAssignList.get(i); criteria = searchAssign.getCriteria(); buffer.append("id: "); buffer.append(criteria.getCriteriaId()); buffer.append("is-splitted: "); buffer.append(criteria.getIsSplitted()); buffer.append("key: "); buffer.append(criteria.getKey()); buffer.append("type: "); buffer.append(criteria.getType()); buffer.append("<br>"); } trans.commit(); } catch (Exception e) { buffer.append("Error: "); buffer.append(e.getMessage()); e.printStackTrace(); } request.setAttribute("test", buffer.toString()); return mapping.getInputForward(); } }
Stateless Session Bean:
@Stateless public class AuditSearchBean implements AuditSearch { @PersistenceContext EntityManager em; public AuditSearchTemplateEntity getTemplate(BigInteger id) { return em.find(AuditSearchTemplateEntity.class, id); } }
Template Entity:
@Entity(name = "AuditSearchTemplateEntity") @Table(schema = "UGIS1004", name = "GIS_T_AUDIT_SEARCH_TEMPL") public class AuditSearchTemplateEntity { private BigInteger templateId; private BigInteger key; private List<AuditSearchAssignEntity> auditSearchAssignEntities; @Id @Column(name = "TEMPLATE_ID", nullable = false, length = 38) public BigInteger getTemplateId() { return templateId; } public void setTemplateId(BigInteger templateId) { this.templateId = templateId; } @Column(name = "KEY", nullable = false, length = 4) public BigInteger getKey() { return key; } public void setKey(BigInteger key) { this.key = key; } @OneToMany(mappedBy = "templateId") public List<AuditSearchAssignEntity> getAuditSearchAssignEntities() { return auditSearchAssignEntities; } public void setAuditSearchAssignEntities(List<AuditSearchAssignEntity> auditSearchAssignEntities) { this.auditSearchAssignEntities = auditSearchAssignEntities; } public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; AuditSearchTemplateEntity that = (AuditSearchTemplateEntity) o; if (templateId != null ? !templateId.equals(that.templateId) : that.templateId != null) return false; return true; } public int hashCode() { return (templateId != null ? templateId.hashCode() : 0); } }
Criteria Entity:
@Entity(name = "AuditSearchCriteriaEntity") @Table(schema = "UGIS1004", name = "GIS_T_AUDIT_SEARCH_CRIT") public class AuditSearchCriteriaEntity { private BigInteger criteriaId; private BigInteger key; private BigInteger type; private BigInteger isSplitted; private List<AuditSearchAssignEntity> auditSearchAssignEntities; @Id @Column(name = "CRITERIA_ID", nullable = false, length = 38) public BigInteger getCriteriaId() { return criteriaId; } public void setCriteriaId(BigInteger criteriaId) { this.criteriaId = criteriaId; } @Column(name = "KEY", nullable = false, length = 4) public BigInteger getKey() { return key; } public void setKey(BigInteger key) { this.key = key; } @Column(name = "TYPE", nullable = false, length = 4) public BigInteger getType() { return type; } public void setType(BigInteger type) { this.type = type; } @Column(name = "IS_SPLITTED", nullable = false, length = 1) public BigInteger getIsSplitted() { return isSplitted; } public void setIsSplitted(BigInteger splitted) { isSplitted = splitted; } @OneToMany(mappedBy = "criteriaId") public List<AuditSearchAssignEntity> getAuditSearchAssignEntities() { return auditSearchAssignEntities; } public void setAuditSearchAssignEntities(List<AuditSearchAssignEntity> auditSearchAssignEntities) { this.auditSearchAssignEntities = auditSearchAssignEntities; } public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; AuditSearchCriteriaEntity that = (AuditSearchCriteriaEntity) o; if (criteriaId != null ? !criteriaId.equals(that.criteriaId) : that.criteriaId != null) return false; return true; } public int hashCode() { return (criteriaId != null ? criteriaId.hashCode() : 0); } }