2016-09-01 3 views
0

안녕하세요. JPA 복합 기본 키와 관련하여 도움을 요청하고 싶습니다. 내 프로젝트에 대한 내 MySQL 데이터베이스 다른 사용자, 작업 및 참여 테이블에 있습니다. 그것을 위해 나는 사용자, 작업 및 참여 클래스를 만들었습니다. 테이블 참여에는 사용자 기본 키와 기본 키를 참조하는 복합 기본 키가 있습니다. 다음 코드를 요약하면 참가MyKeyParticipation입니다.개체를 jpa의 복합 기본 키로 사용하십시오.

@Entity 
@ManagedBean 
@IdClass(value=MyParticipationKey.class) 
public class Participation { 
@Id 
@Column(name="pkIduser") 
private User user; 
@Id 
@Column(name="pkIdet") 
private Work work; 
public User getUser() { 
    return user; 
} 
public void setUser(User user) { 
    this.user = user; 
} 
public Work getWork() { 
    return work; 
} 
public void setWork(Work work) { 
    this.work = work; 
}} 

public class MyParticipationKey implements Serializable { 
/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
private User user; 
private Work work; 
public User getUser() { 
    return user; 
} 
public void setUser(User user) { 
    this.user = user; 
} 
public Work getWork() { 
    return work; 
} 
public void setWork(Work work) { 
    this.work = work; 
} 
} 

다음 줄

클래스 사용자를 우려 내 IDE 이클립스 나 에게 말한다 때문에

@Entity 
@ManagedBean 
public class User implements Serializable{ 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long pkIduser; 
@NotNull(message="Please enter your firstname") 
@Size(min=3,message="Min size 3 characters!") 
private String firstname; 
@NotNull(message="Please enter your lastname") 
@Size(min=3,message="Min size 3 characters!") 
private String lastname; 
@NotNull(message="Phone number field must not be null") 
@Size(min=5,message="Phone number must have !") 
private String phone; 
private String statut; 
@NotNull(message="Enter valid email") 
@Pattern(regexp="([^[email protected]]+)(\\.[^[email protected]]+)*@([^[email protected]]+\\.)+ ([^[email protected]]+)",message="please enter valid email") 
private String email; 
@NotNull(message="please enter password") 
@Size(min=3,message="Password must have 3 characters") 
private String password; 
public Long getPkIduser() { 
    return pkIduser; 
} 
public void setPkIduser(Long pkIduser) { 
    this.pkIduser = pkIduser; 
} 
public String getFirstname() { 
    return firstname; 
} 
public void setFirstname(String firstname) { 
    this.firstname = firstname; 
} 
public String getEmail() { 
    return email; 
} 
public void setEmail(String email) { 
    this.email = email; 
} 
public String getLastname() { 
    return lastname; 
} 
public void setLastname(String lastname) { 
    this.lastname = lastname; 
} 
public String getPhone() { 
    return phone; 
} 
public void setPhone(String phone) { 
    this.phone = phone; 
} 
public String getStatut() { 
    return statut; 
} 
public void setStatut(String statut) { 
    this.statut = statut; 
} 
public String getPassword() { 
    return password; 
} 
public void setPassword(String password) { 
    this.password = password; 
} 


} 

@Entity 
@ManagedBean 
public class Work implements Serializable{ 
/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long pkIdet; 
@NotNull(message="Enter the name") 
@Size(min=3,message="Name must have 3 characters!") 
private String name; 
private String type; 
private String description; 
private String statut; 
@ManyToOne 
@JoinColumn(name="pkIduser") 
private User user; 

public User getUser() { 
    return user; 
} 
public void setUser(User user) { 
    this.user = user; 
} 
public String getStatut() { 
    return statut; 
} 
public void setStatut(String statut) { 
    this.statut = statut; 
} 
public Long getPkIdet() { 
    return pkIdet; 
} 
public void setPkIdet(Long pkIdet) { 
    this.pkIdet = pkIdet; 
} 
public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
public String getType() { 
    return type; 
} 
public void setType(String type) { 
    this.type = type; 
} 
public String getDescription() { 
    return description; 
} 
public void setDescription(String description) { 
    this.description = description; 
} 
} 

내가 여기 잘못 이해하지 않는 작업 완료 그 임베디드 ID 클래스 [클래스 gct.entities.MyParticipationKey]에서 [작업] 매핑이이 클래스에 대한 잘못된 매핑입니다. 임베디드 ID 사양 (소스 [class gct.entities.Participation]의 속성 [myParticipationKey])과 함께 사용되는 임베드 가능 클래스는 기본 매핑 만 포함 할 수 있습니다. 기본이 아닌 맵핑을 제거하거나 임베디드 ID 스펙을 임베디드 소스에서 변경하십시오. 제발 나를 도와 주시면 제안을 환영합니다. 감사!

+0

그리고 무엇이 잘못 되었나요? 일부 문서를보십시오 http://www.datanucleus.org/products/accessplatform_5_0/jpa/orm/compound_identity.html#a1_1_uni –

+0

@NeilStockton 괜찮습니다. 방문했는데 내가 원하는 것을 찾지 못했습니다. 내 질문은 "참여"라는 테이블을 생성 관계 N-N에 의해 ​​조인 된 두 테이블에 관한 것입니다. – SANDWIDI

+0

그 페이지는 엔티티를 PK의 일부로하는 방법을 알려줍니다. 그리고 당신이 원하는 것을 말하지 않았으므로 어떻게 도와 줄 수 있습니까?! –

답변

0

@IdClass에는 대상 엔터티의 @Id 필드와 일치하는 입력란을 포함해야합니다.

public class MyParticipationKey implements Serializable { 
    private Long user; 
    private Long work; 
    ... 
} 

주 정상 @IdClass 같은 필드 이름이 기업의 해당 필드 이름과 일치해야합니다 (userwork을,이 경우) : MyParticipationKey는 다음과 같이 보일 것입니다 필드의 유형은 대상 엔터티의 기본 키 필드 유형 (이 경우 Long)과 일치해야합니다.

파생 된 ID는 JPA 2.1 사양 2.4.1 절에서 설명합니다.

+0

명시 해주세요. – SANDWIDI

+0

질문에'User'와'Work'에 대한 코드 (그리고 필요한 경우 해당 @IdClasses)를 추가하면, 당신에게 쓸만한'MyParticipationKey'코드를 줄 수있을 것입니다. –

+0

괜찮습니다. 사용자 및 작업 코드를 추가 할 예정입니다. – SANDWIDI