2010-06-05 3 views
1

AdGroupInterfaces 목록을 관리하는 클래스 캠페인이 있습니다. 구현추상 클래스 또는 인터페이스를 인스턴스화 할 수 없습니다. 지속되는 동안의 문제

@Entity 
    @Table(name = "campaigns") 
    public class Campaign implements Serializable,Comparable<Object>,CampaignInterface    { 
private static final long serialVersionUID = 1L; 


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

    @OneToMany (
     cascade = {CascadeType.ALL}, 
     fetch = FetchType.EAGER, 
    targetEntity=AdGroupInterface.class 
     ) 
@org.hibernate.annotations.Cascade(
value = org.hibernate.annotations.CascadeType.DELETE_ORPHAN 
) 
@org.hibernate.annotations.IndexColumn(name = "CHOICE_POSITION") 
private List<AdGroupInterface> AdGroup; 


public Campaign() { 
    super(); 
} 

public List<AdGroupInterface> getAdGroup() { 
    return AdGroup; 
} 

public void setAdGroup(List<AdGroupInterface> adGroup) { 
    AdGroup = adGroup; 
} 

public void set1AdGroup(AdGroupInterface adGroup) { 
    if(AdGroup==null) 
     AdGroup=new LinkedList<AdGroupInterface>(); 
    AdGroup.add(adGroup); 
} 

}

AdGroupInterface의 구현이 광고 그룹 인을 지속 할 예정 임. 캠페인의 광고 그룹을 목록에 추가하면

캠페인 c; . c.getAdGroupList() 추가 (새 광고 그룹을()) 등 및 캠페인

에게 저장은 "추상 클래스 또는 인터페이스의 인스턴스를 할 수 없습니다"라는 AdGroupInterface

는 그냥 지속하기 전에 구현을 인식하지합니다. ..

반면에 광고 그룹을 별도로 유지합니다. 다른 엔티티의 구성원 인 경우 지속되지 않습니다.

  import java.io.Serializable; 
     import java.util.List; 
     import javax.persistence.*; 


      @Entity 

      @DiscriminatorValue("1") 

      @Table(name = "AdGroups") 

     public class AdGroups implements Serializable,Comparable,AdGroupInterface{ 


/** 
* 
*/ 
private static final long serialVersionUID = 1L; 


private Long Id; 


private String Name; 


private CampaignInterface Campaign; 


private MonetaryValue DefaultBid; 

    public AdGroups(){ 

    super(); 
} 
public AdGroups(String name, CampaignInterface campaign) { 
    super(); 
    this.Campaign=new Campaign(); 
    Name = name; 
    this.Campaign = campaign; 
    DefaultBid = defaultBid; 
    AdList=adList; 
} 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name="AdGroup_Id") 
public Long getId() { 
    return Id; 
} 

public void setId(Long id) { 
    Id = id; 
} 

@Column(name="AdGroup_Name") 
public String getName() { 
    return Name; 
} 

public void setName(String name) { 
    Name = name; 
} 

@ManyToOne 
@JoinColumn (name="Cam_ID", nullable = true,insertable = false) 
public CampaignInterface getCampaign() { 

    return Campaign; 
} 

public void setCampaign(CampaignInterface campaign) { 
    this.Campaign = campaign; 
} 

}

내가 무엇을 놓치고? 그것으로 들여다주세요 ...

답변

2

OneToMany 협회의 targetEntity은 클래스 (어쩌면 추상적이지만 인터페이스는 아님) 여야한다고 생각합니다. this previous answer을 살펴보십시오.

+0

답장을 보내 주셔서 감사합니다 :) getHibernateTemplate.save (광고 그룹)라고 말하면 지속됩니다. (인터페이스였던) 하지만 adgroup이 클래스 멤버 인 save (campaign) doesnt 작업은 ... campaigninterface_adgroupinterface 후에 세 번째 조인 테이블 campaign_adgroupinterface를 만듭니다. 즉 campaignInterface에서 캠페인을 인식하지만 광고 그룹이 아닙니다. 캠페인의 데이터 멤버 인 경우 문제가 있음을 의미합니다. 내 생각에 .......... – sammy

+0

@sammy 구현 작업 여부 그렇지 않으면 뭔가를 변경해야합니다. –

+0

오 예 그렇습니다. JPA는 이전 버전의 인터페이스를 지속시키지 않습니다. 새 버전을 사용하면 ... abstract 클래스가 옵션 인 것 같습니다. 아프지 않습니다. – sammy

관련 문제