两个外键作为主键

我有以下表格 在这里输入图像描述

我将如何使用hibernate注释来实现这一点?

目前的代码是:(为了简洁起见)

用户

@Entity
@Table(name = "user")
public class User implements java.io.Serializable {
    @Id
    @GeneratedValue
    public Long getId() {
        return id;
    }
}

社交网络

@Entity
@Table(name = "social_network")
public class SocialNetwork implements java.io.Serializable {
    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
}

SocialProfile

@Entity
@Table(name = "social_profile")
public class SocialProfile implements java.io.Serializable {
    @Id
    @ManyToOne
    @JoinColumn(name="user_id")
    public User getUser() {
        return user;
    }

    @Id
    @ManyToOne
    @JoinColumn(name="social_network_id")
    public SocialNetwork getSocialNetwork() {
        return socialNetwork;
    }
}

很明显,我的代码现在无法正常工作。 任何人都可以对此有所了解吗?


你需要一个可嵌入的SocialProfileId像这样:

@Embeddable
public class SocialProfileId implements Serializable {
    @Column(name = "user_id")
    private long userId;
    @Column(name = "social_network_id")
    private long socialNetworkId;
}

那么,你的SocialProfile实体将如下所示:

@Entity
@Table(name = "social_profile")
public class SocialProfile implements java.io.Serializable {

    @EmbeddedId
    private SocialProfileId id;

    @ManyToOne
    @JoinColumn(name="user_id")
    public User getUser() {
        return user;
    }

    @ManyToOne
    @JoinColumn(name="social_network_id")
    public SocialNetwork getSocialNetwork() {
        return socialNetwork;
    }
}

编辑对不起,我在我的答案字段和方法混合注释...从来没有这样做! ;-)


看起来你需要mamy-to-many映射连接表和额外的列。 为此,您需要创建2个以上的类。

FYI:http://www.mkyong.com/hibernate/hibernate-many-to-many-example-join-table-extra-column-annotation/


我对REST应用程序的问题很相似,但有点不同,我会在这里发布。 我有2个数据表: 歌曲标签各有一个ID(歌曲,标签)。 然后我有一张桌子将它们连接在一起Tagassignment只有SongTag中的两个主键。 所以我不想加入他们,我想用两个外键保留表格。

我的解决方案来源:http://www.objectdb.com/java/jpa/entity/id


之前

歌曲

@Entity
@Table(name = "songs")
data class Song(

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    val id: Int,

    ...
)

标签

@Entity
@Table(name = "tags")
data class Tag(

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    val id: Int,

    ...
)

Tagassignment

 @Entity
 @Table(name = "tagassignment")
 data class Tagassignment(

     val songid: Int,

     val tagid: Int

 )

我没有改变歌曲标签

Tagassignment

@Entity
@IdClass(value = TagassignmentKey::class)
@Table(name = "tagassignment")
data class Tagassignment(

    @Id
    val songid: Int,

    @Id
    val tagid: Int

)

我创建了一个Key类

TagassignmentKey

class TagassignmentKey(val songid: Int, val tagid: Int) : Serializable {

    constructor() : this(0, 0)

}
链接地址: http://www.djcxy.com/p/87995.html

上一篇: Two foreign keys as primary key

下一篇: bottom to its default value