【问题标题】:sql query with join using hibernate使用休眠进行连接的sql查询
【发布时间】:2018-09-16 21:21:43
【问题描述】:

在我的项目中,我创建了这个类:

@Entity
@Table(name= "Wall")
public class Wall {

    @Id
    @GeneratedValue
    @Column(name="id")
    private Integer id;

    @ManyToOne
    @JoinColumn(name="user_id", nullable=false)
    private User user;

    @ManyToOne
    @JoinColumn(name="likable_id", nullable=false)
    private Likable likable;

    @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(
        name= "Wall_Follower",
        joinColumns = { @JoinColumn(name = "wall_id") },
        inverseJoinColumns = { @JoinColumn(name = "follower_id") }
    )
    private Set<User> followers;

谁给了这张桌子:

Wall
+----+------------+---------+
| id | likable_id | user_id |
+----+------------+---------+

Wall_Follower
+---------+-------------+
| wall_id | follower_id |
+---------+-------------+

我想搜索关注者。使用 SQL 查询,它会给出:

SELECT * FROM `Wall_Follower` AS MF 
    LEFT JOIN `Wall` AS M 
    ON MF.wall_id= M.wall_id 
    WHERE MF.follower_id = 1

我想过做一个这样的类追随者:

@Entity
@Table(name= "Mur_Follower")
public class Follower {

    @Id
    @Column(name="follower_id")
    private Integer id;
    @Column(name="mur_id")
    private Mur mur;

但我有一个错误:

Could not determine type for: beans.Wall, at table: Wall_Follower, for columns: [org.hibernate.mapping.Column(wall_id)]

【问题讨论】:

  • 您可以发布Wall_Follower Entity 的代码吗?另外,Mur_Follower 是什么?你能发布它的架构吗?
  • User 与这些有什么关系?在任何地方都与Follower 没有关系。提供正确的映射,以便评论有依据

标签: java hibernate jpa jakarta-ee


【解决方案1】:

您需要进行双向映射,因为 Wall_follower 具有多对多关系。

@Entity
@Table(name= "Mur_Follower")
public class Follower {

    @Id
    @Column(name="follower_id")
    private Integer id;
    @Column(name="mur_id")
    private Mur mur;

 @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(
        name= "Wall_Follower",
        joinColumns = { @JoinColumn(name = "follower_id") },
        inverseJoinColumns = { @JoinColumn(name = "wall_id") }
    )
    private Set<Wall> walls;

另外,如下更改墙类中的映射

 @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(
        name= "Wall_Follower",
        joinColumns = { @JoinColumn(name = "wall_id") },
        inverseJoinColumns = { @JoinColumn(name = "follower_id") }
    )
    private Set<Follower> followers;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    相关资源
    最近更新 更多