2014-11-22 10 views
0

처음에는 내가 무엇을하고 싶은지 알게 될 것입니다. 나중에 나에게 문제를 보여줄 것입니다.JPA JSF를 사용하여 일대일 관계로 데이터를 지속하는 방법 JSF

위의 화면 제목에서 enter image description here

및 설명는 AboutUs 법인에서하고 필드의 나머지는 GeneralImage 엔티티를위한 것입니다. 나는 두 기관에서 데이터를 유지하고 나는 아래의 코드를 작성했습니다이 작업을 수행하기 위해 서로

한 관계를 갖고 싶어 만들기 버튼을 클릭하면

지금 내가 무엇을 달성하고자하는 것은 어떤 문제가있는

AboutUs.java

package com.model; 
import java.io.Serializable; 
import javax.persistence.CascadeType; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.FetchType; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.NamedQuery; 
import javax.persistence.OneToOne; 

@Entity 
@NamedQuery(name = "AboutUs.findAboutUsByIdWithImages", query = "Select s from AboutUs s where 
s.aboutusid = :aboutusid")  
public class AboutUs implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue 
    private int aboutusid; 
    private String aboutustitle; 
    private String description; 

    public static final String FIND_ABOUTUS_BY_ID_WITH_IMAGES = 
    "AboutUs.findAboutUsByIdWithImages"; 
    @OneToOne(cascade=CascadeType.ALL,fetch = FetchType.EAGER) 
    @JoinColumn(name = "imageid") 
private GeneralImage image; 
//Here Below I have Added Setters and Getters 
………. 
} 

GeneralImage

@Entity 
public class GeneralImage { 

@Id 
@GeneratedValue 
private int imageid; 
private String fileName; 
private String categoryid; 
private int orderofappearance; 
private String mimetype; 
private int filesize; 
private int foreignkeyid; 

@OneToOne(mappedBy="image", cascade=CascadeType.ALL) 
private AboutUs aboutus; 

//The Below Are The Setters and Getters 
} 

아래는 내가

public void createAboutus() 
{ 
try 
{ 
    aboutus.setImage(generalImage); //Here I am adding the generalImage object to about so that 
            //it can be persisted 
    aboutusFacade.save(aboutus); 
    closeDialog(); 
    displayInfoMessageToUser("Created With Success......!"); 
    loadAboutus(); 
    resetAboutus(); 
} 
catch (Exception e) 
{ 
    keepDialogOpen(); 
    displayErrorMessageToUser("OOPS, We Could Not Create...... Try Again Later......!"); 
    e.printStackTrace(); 
} 
} 

나중에 외관 클래스 으로 저장 AboutUsMB 내 createAboutus()에서 AboutUsMB AboutUsMB 을 내 Facelets의 이미지

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:p="http://primefaces.org/ui"> 
<h:body> 
    <p:dialog widgetVar="aboutusCreateDialogWidget" 
    id="aboutusCreateDialogId" height="400" width="1000" modal="true" 
    closable="true" draggable="false" resizable="false" showEffect="puff" hideEffect="fold" 
    header="Create About Us"> 
    <h:form id="aboutusCreateDialogForm" prependId="false"> 
     <h:panelGrid columns="2"> 
      <h:outputText value="* #{msgs.aboutustitle}" /> 
      <h:inputText value="#{aboutUsMB.aboutus.aboutustitle}" required="true" label="# 
      {msgs.aboutustitle}" > 
       <f:validateLength minimum="4" /> 
      </h:inputText> 

      <h:outputText value="* #{msgs.aboutusescription}" /> 
      <h:inputText value="#{aboutUsMB.aboutus.description}" required="true" label="# 
      {msgs.aboutusescription}" /> 

      <h:outputText value="* #{msgs.categoryName}" /> 
      <h:inputText value="#{generalImageMB.generalImage.categoryid}" required="true" 
      label="#{msgs.categoryName}" /> 

      <h:outputText value="* #{msgs.orderOfAppearance}" /> 
      <h:inputText value="#{generalImageMB.generalImage.orderofappearance}" required="true" 
      label="#{msgs.orderOfAppearance}" /> 

      <h:outputText value="* #{msgs.mimetype}" /> 
      <h:inputText value="#{generalImageMB.generalImage.mimetype}" required="true" label="# 
      {msgs.mimetype}" /> 

      <h:outputText value="* #{msgs.fileSize}" /> 
      <h:inputText value="#{generalImageMB.generalImage.filesize}" required="true" label="# 
      {msgs.fileSize}" /> 
     </h:panelGrid> 

     <h:panelGrid columns = "2"> 
     <p:commandButton value="#{msgs.create}" icon="ui-icon-plus" 
       action="#{aboutUsMB.createAboutus()}" 
       update=":messageGrowl :aboutusForm:aboutusTable" 
       oncomplete="closeDialogIfSucess(xhr, status, args, aboutusCreateDialogWidget, 
       'aboutusCreateDialogId')" 
       /> 
     <p:commandButton value="#{msgs.cancel}" icon="ui-icon-cancel" actionListener="# 
     {aboutusMB.resetAboutus()}" onclick="aboutusCreateDialogWidget.hide();" type="button" /> 

     </h:panelGrid> 
    </h:form> 
    </p:dialog> 
</h:body> 
</html> 

다음이다 방법,210 AboutUsFacade

public interface AboutUsFacade { 
//The Below I Am Adding Methods So That I Can Deal With Addition, Deletion and Updation of Users 
public abstract void save(AboutUs aboutus); 
} 

외관도 구현 클래스 AboutUsFacadeImp

public class AboutUsFacadeImp implements AboutUsFacade 
{ 
@EJB 
private AboutUsDAO aboutusDAO; 

@Override 
public void save(AboutUs aboutus) 
{ 
    aboutusDAO.save(aboutus); 
} 
} 

GenericDAO 클래스

public abstract class GenericDAO<T> 
{ 
    private final static String UNIT_NAME = "SmartRealtorsPU"; 

    @PersistenceContext(unitName = UNIT_NAME) 
    private EntityManager em; 
    private Class<T> entityClass; 

    public GenericDAO(Class<T> entityClass) 
    { 
    this.entityClass = entityClass; 
    } 

    public void save(T entity) { 
    em.persist(entity); 
} 
} 

그래서 위의 코드를 사용하면 내가 가질 수 아니다 generalImage 데이터는 어디에 데이터가 u는 관계 분야 인 imageid이

enter image description here

그래서 씹는 담배의 한 조각 중 하나가 문제가 될 수 무슨를 해결 NULL 인 것을 알 수있다 또한 지속 된 경우에만 aboutus 지속하고 난 잘못이고 무엇

난 당신과 같은 문제를 가지고 문제

+0

연구 결과가 없기 때문에 내가이 선정 된 이유를 이해하고 있지 않다 나는 지난 이틀 동안이 예제를 시도하고 있으며 많은 연구를 해왔다.이 질문에 답할 수있는 사람이 있는가? – Zaheer

답변

0

의 원인이되는 지속 한 형태를 사용하여 오전 일을해야, 한쪽에만 양방향 매핑을 매핑합니다.당신의 AboutUsMB createAboutus()에서

다음을 수행하려고하면 할 대신

aboutus.setImage(generalImage); 

aboutus.setImage(generalImage); 
generalImage.setAboutus(aboutus);