如何表示jointable和jointable的复合键?

bzzcjhmw  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(310)

假设我有一个webapp,用户可以跟踪其他用户。
在我的数据库里,我有一个 User table,和 Following table。
这个 Following 表只有两个值:followUserId和followDuserId。
在java中,我有一个user类。我看到的大多数教程都涉及一个对象,其中包含一组与其相关的对象。许多教程可以描述如何让用户有一组用户跟随该用户,一组用户跟随一个用户。但这需要大量的内存。
我正在考虑另一种结构,其中用户对象没有关于以下内容的信息。相反,有一个如下对象

@Entity
@Table(name = "Following")
public class Following {
    RegisteredUser follower;
    RegisteredUser followed;
}

并对应于联接表。当我想得到一个用户的所有追随者时,我可以用这个用户作为追随者来查询所有的追随者对象。
我的问题是:
followers表具有两个userid中的每一个的复合键。如何使用注解来表示复合键?@id注解将单个变量表示为键
我怎么能做这样的查询?
如果相关的话,我使用mysql作为数据库

ybzsozfc

ybzsozfc1#

如果使用jpa>2.0,可以将关系标记为id:

@Entity
@Table(name = "Following")
@IdClass(FollowingId.class)
public class Following {
    @Id
    RegisteredUser follower;
    @Id
    RegisteredUser followed;
}

public class FollowingId implements Serializable {
    private int follower;
    private int followed;
}

following id类中的类型必须与registereduser id的类型匹配。如果搜索jpa派生id,则有许多更复杂的示例。
对于查询,这取决于您要查找的内容。可以使用jpql获得特定用户的关注者集合:

"Select f.follower from Following f where f.followed = :user"

相关问题