提问者:小点点

如何制作一个由其他表的主键组成的复合主键,如FK


我正在使用toplink处理JPA,并希望创建实体类。我想使用表A的(别名)PK作为表B的复合主键(消息)中外键的一部分。我已经为实体创建了以下结构。但是我看到连接列为< code>null,并在表中显示< code>null。

@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    |       |
+----------------+--------------+------+-----+---------+----‌​---+

共1个答案

匿名用户

在我看来,注释排序很重要,把@MapsId放在第一位。查看参考资料http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#d0e4865