2016-08-24 4 views
0

У меня есть сущность:Объектов сущностей ассоциации в JPA

package com.igorgorbunov3333.core.entities.domain; 

    import javax.persistence.*; 

    /** 
    * Created by Игорь on 03.04.2016. 
    */ 

    @Entity 
    @Table(name = "cases") 
    public class Case { 

     @Id 
     @GeneratedValue(strategy = GenerationType.IDENTITY) 
     private long id; 

     private String caseNumber; 

     private String dataI; 

     private String dataII; 

     private String dataIII; 

     private long judgeID; 

     private long lawyerID; 

     private long clientID; 

     @OneToOne 
     @JoinColumn(name = "id") 
     private Judge judge; 

     @OneToOne 
     @JoinColumn(name = "id") 
     private Lawyer lawyer; 

     @OneToOne 
     @JoinColumn(name = "id") 
     private Client client; 

     @Enumerated(value = EnumType.ORDINAL) 
     private CaseStatus statusI; 

     @Enumerated(value = EnumType.ORDINAL) 
     private CaseStatus statusII; 

     @Enumerated(value = EnumType.ORDINAL) 
     private CaseStatus statusIII; 

     private String document; 

     // getters and setters 
    } 

Как и можно видеть, что есть три объекта: судья, адвокат и клиент, которые связаны с моей сущностью. Когда я получаю сущность, я получаю ошибку: NullPointerException. Поэтому я вынужден инстанцирует, что объекты в CaseServiceImpl.java, чтобы избежать исключения:

public Case findById(long id) { 
    Case c = entityManager.find(Case.class, id); 
    c.setJudge(new JudgeServiceImpl().findById(c.getJudgeID())); 
    c.setClient(new ClientServiceImpl().findById(c.getClientID())); 
    c.setLawyer(new LawyerServiceImpl().findById(c.getLawyerID())); 
    return c; 
} 

ли это правильный способ сделать это? Моего JSP код страницы:

<%@ page import="com.igorgorbunov3333.core.entities.domain.Case" %> 
<%@ page import="java.util.List" %> 

<%@ page contentType="text/html; charset=UTF-8" language="java" %> 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 

<fmt:requestEncoding value="UTF-8"/> 

<%-- HEADER --%> 

<c:import url="/common/header.jsp"> 
    <c:param name="title" value="Cases"/> 
    <c:param name="a" value="Дела"/> 
</c:import> 

<%-- BODY --%> 

<div class="table-header"> 
    <div class="first-header-element">№</div> 
    <div class="header-element">Номер дела</div> 
    <div class="header-element">Представитель</div> 
    <div class="header-element">Клиент</div> 
    <div class="last-header-element"></div> 
</div> 

<br> 

<%List<Case> cases = (List<Case>) request.getAttribute("cases"); 
    int count = 0; 
    for (Case c : cases) {%> 
<div style="text-align: center"> 
    <label> 
     <textarea class="first-element" readonly><%= ++count%></textarea> 
    </label> 
    <label> 
     <textarea class="element" readonly><%= c.getCaseNumber()%></textarea> 
    </label> 
    <label> 
     <textarea class="element" readonly><%= c.getLawyer().getLawyerName()%></textarea> 
    </label> 
    <label> 
     <textarea class="element" readonly><%= c.getClient().getClientName()%></textarea> 
    </label> 
    <a href="${pageContext.request.contextPath}/showSingleCase?caseID=<%=c.getId()%>"><label> 
     <input type="button" class="button" value="Детальней" style="width: 10%"> 
    </label></a> 
</div> 
<%}%> 

<%-- FOOTER --%> 

<c:import url="/common/footer.jsp"> 
</c:import> 

встречающаяся ошибка в строке:

<textarea class="element" readonly><%= c.getLawyer().getLawyerName()%></textarea> 
+1

Зачем вам хранить «judID», «lawyerID», «clientID» в полях, когда у вас есть уже существующие объекты ?! –

+0

Потому что я использую NamedQueries, для которого требуется идентификатор объекта id (не весь объект ...). В табличных случаях имеется несколько внешних ключей. И чтобы сделать какой-то выбор sql (конкретные случаи), мне нужно использовать внешние ключи. Могу ли я использовать поля объектов в именованных запросах? –

+0

Конечно, вы можете использовать поля в JPQL, а NamedQueries - только JPQL! –

ответ

-2

Я вижу, у отсутствует орудия serialization в entity class или уже создал интерфейс для entity класса. smth вроде CaseRepositoryinterface, где u может объявить метод 'findById', потому что я предполагаю, что метод по умолчанию jpa для получения по id равен 'getById', так что это может быть пользовательский метод, который пытается создать.

Смежные вопросы