有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JPA提供的java持久化相关实体

有两个实体:

案例

package com.igorgorbunov3333.core.entities.domain;

import javax.persistence.*;

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

@Entity
@Table(name = "cases")
@NamedQueries({
    @NamedQuery(name = "findAllCases", query = "SELECT c FROM Case c"),

    @NamedQuery(name = "findCasesWithJudge", query = "SELECT c FROM Case c " +
            "WHERE c.firstInstance.judge.id = :id OR c.secondInstance.judge.id = :id OR c.thirdInstance.judge.id = :id")
})
public class Case {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name = "case_number")
    private String caseNumber;

    @Column(name = "client")
    private String clientName;

    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "first_instance_id")
    private FirstInstance firstInstance;

    @OneToOne
    @JoinColumn(name = "second_instance_id")
    private SecondInstance secondInstance;

    @OneToOne
    @JoinColumn(name = "third_instance_id")
    private ThirdInstance thirdInstance;

    @ManyToOne
    @JoinColumn(name = "category_id")
    private Category category;

    private float price;
}

第二个实体第一个实例:

package com.igorgorbunov3333.core.entities.domain;

import com.igorgorbunov3333.core.entities.enums.CaseStatus;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Created by Игорь on 19.09.2016.
 */
@Entity
@Table(name = "first_instance")
public class FirstInstance {

    @Id
    private long id;

    @Temporal(TemporalType.DATE)
    private Date date;

    @ManyToOne
    @JoinColumn(name = "judge_id")
    private Judge judge;

    @ManyToOne
    @JoinColumn(name = "lawyer_id")
    private Lawyer lawyer;

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

    @OneToMany(mappedBy = "firstInstance")
    private List<CourtHearingFirst> hearings = new ArrayList<>();
}

如您所见,字段FirstInstance具有引用类型,但与my db中的数值列相关,该数值列等于FirstInstances id。
我同时坚持Case实体和FirstInstance在坚持FirstInstance之后id字段等于,例如35,但实体Case字段总是等于0,为什么?也可能等于35。。。 以下是我的Servlet代码:

@WebServlet(name = "DoCreateCase", urlPatterns = "/doCreateCase")
public class DoCreateCase extends HttpServlet {
private final CategoryService categoryService = SpringAppContextManager.getAppContext()
        .getBean("CategoryService", CategoryService.class);

private final JudgeService judgeService = SpringAppContextManager.getAppContext()
        .getBean("JudgeService", JudgeService.class);

private final LawyerService lawyerService = SpringAppContextManager.getAppContext()
        .getBean("LawyerService", LawyerService.class);

private final FirstInstanceService firstInstanceService = SpringAppContextManager.getAppContext()
        .getBean("FirstInstanceService", FirstInstanceService.class);

private final CaseService caseService = SpringAppContextManager.getAppContext()
        .getBean("CaseService", CaseService.class);

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Case lawsuit = new Case();
    FirstInstance firstInstance = new FirstInstance();

    String caseNumber = request.getParameter("case-number");
    lawsuit.setCaseNumber(caseNumber);

    String clientName = request.getParameter("client-name");
    lawsuit.setClientName(clientName);

    String dayOpen = request.getParameter("day-open"),
           monthOpen = request.getParameter("month-open"),
           yearOpen = request.getParameter("year-open");
    Date date = DateUtil.toDate(yearOpen, monthOpen, dayOpen);
    firstInstance.setDate(date);

    long categoryId = Long.valueOf(request.getParameter("category"));

    Category category = categoryService.findById(categoryId);
    lawsuit.setCategory(category);

    float price = Float.valueOf(request.getParameter("price"));
    lawsuit.setPrice(price);

    long judgeId = Long.valueOf(request.getParameter("judge"));
    Judge judge = judgeService.findById(judgeId);
    firstInstance.setJudge(judge);

    long lawyerId = Long.valueOf(request.getParameter("lawyer"));
    Lawyer lawyer = lawyerService.findById(lawyerId);
    firstInstance.setLawyer(lawyer);

    lawsuit.setFirstInstance(firstInstance);

    caseService.create(lawsuit);


 }
}

这是代码,它向您展示了我如何持久化实体:

package com.igorgorbunov3333.core.entities.service.impl;

import com.igorgorbunov3333.core.entities.domain.Case;
import com.igorgorbunov3333.core.entities.enums.CaseStatus;
import com.igorgorbunov3333.core.entities.service.api.CaseService;
import com.igorgorbunov3333.core.util.DateUtil;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.util.*;

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

@Repository
@Service("CaseService")
public class CaseServiceImpl implements CaseService {

@PersistenceContext
private EntityManager entityManager;

@Transactional
public Case create(Case lawsuit) {
    entityManager.persist(lawsuit);
    return lawsuit;
}
}

怎么了


共 (0) 个答案