2016-08-31 9 views
1

Я работаю над JPA с помощью toplink и хочу создать класс Entity. Я хочу использовать PK таблицы A (псевдоним) как часть внешнего ключа в составном первичном ключе (сообщение) таблицы B. Я создал следующую структуру для Entity. Но я вижу колонку соединения null и показать null в таблице.Как создать составной первичный ключ, который состоит из ПК другой таблицы, как FK

@Embeddable 
public class MessageEntityPK implements Serializable { 
    private static final long serialVersionUID = -229800894330529492L; 
    private String messageSubject; 
    private String aliasName; 

    public String getMessageSubject() { 
     return messageSubject; 
    } 

    public String getAliasName() { 
     return aliasName; 
    } 

    public MessageEntityPK() { 

    } 

    public MessageEntityPK(String msgSubject, String aliasName) { 
     this.aliasName = aliasName; 
     this.messageSubject = msgSubject; 
    } 
} 

@Entity 
@Table(name = "ALIAS_ENTITY") 
public class AliasEntity { 
    @Id 
    private String aliasName; 
    private String aliasPath; 

    public String getAliasName() { 
     return aliasName; 
    } 

    public void setAliasName(String aliasName) { 
     this.aliasName = aliasName; 
    } 

    public String getAliasPath() { 
     return aliasPath; 
    } 

    public void setAliasPath(String aliasPath) { 
     this.aliasPath = aliasPath; 
    } 

    //hashCode and equals Function. 

} 


@Entity 
public class MessageEntity { 
    @EmbeddedId 
    private MessageEntityPK messageEntityID; 

    @ManyToOne 
    @MapsId("aliasName") 
    @JoinColumn(name = "Alias_Name", referencedColumnName = "aliasName") 
    private AliasEntity aliasEntity; 

    public MessageEntityPK getMessageEntityID() { 
     return messageEntityID; 
    } 

    public void setMessageEntityID(MessageEntityPK messageEntityID) { 
     this.messageEntityID = messageEntityID; 
    } 

    public AliasEntity getAliasEntity() { 
     return aliasEntity; 
    } 

    public void setAliasEntity(AliasEntity aliasEntity) { 
     this.aliasEntity = aliasEntity; 
    } 

} 

Таблица:

| ALIASNAME  | varchar(255) | NO | PRI | NULL |  | 
| MESSAGESUBJECT | varchar(255) | NO | PRI | NULL |  | 
| Alias_Name  | varchar(255) | YES | MUL | NULL |  | 
+----------------+--------------+------+-----+---------+----‌​---+ 
+0

| ALIASNAME | varchar (255) | НЕТ | PRI | NULL | | | MESSAGESUBJECT | varchar (255) | НЕТ | PRI | NULL | | | Alias_Name | varchar (255) | ДА | MUL | NULL | | + ---------------- + -------------- + ------ + ----- + --- ------ + ------- + – Abhash

+0

Существует другая реализация toplink и eclipselink. Я использовал реализацию Eclipselink JPA, и моя проблема решена. – Abhash

ответ

0

Кажется мне аннотацию упорядоченность дело, поставить @MapsId первым. Посмотрите на ссылку http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#d0e4865

+0

Спасибо за ваш быстрый ответ. Я понимаю, что я использую jpa, а не hibernate. и при использовании mapid я получаю один дополнительный столбец, который такой же, как FK, и когда я вводим значение в таблице, я получаю нулевое значение, введенное для него. как вы можете видеть, есть два столбца имени псевдонима. я попытался поставить его, но все равно это не помогает – Abhash

+0

Мои мысли были о том, что первый столбец соединения, а не mapsId. Извините, что это не помогло вам –

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

  • Нет связанных вопросов^_^