简体   繁体   English

使用休眠使用联接的SQL查询

[英]sql query with join using hibernate

in my project I created this class: 在我的项目中,我创建了此类:

@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;

who gives this tables: 谁提供此表:

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

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

And I would like to search the followers. 我想搜索关注者。 With an SQL query it would give: 使用SQL查询,它将给出:

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

I thought of doing a class Follower like this: 我想到做一个这样的班级追随者:

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

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

but I have an error: 但我有一个错误:

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

You need to have bidirectional mapping as Wall_follower is having many to many relationship. 您需要双向映射,因为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;

Also, change your mapping in wall class as follows 另外,按以下方式在wall类中更改映射

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM