两个外键作为主键
  我有以下表格 
我将如何使用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只有Song和Tag中的两个主键。 所以我不想加入他们,我想用两个外键保留表格。
我的解决方案来源: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)
}
