SQL-запрос с объединением с использованием Hibernate - PullRequest
0 голосов
/ 17 сентября 2018

В своем проекте я создал этот класс:

@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)]

1 Ответ

0 голосов
/ 17 сентября 2018

Вы должны иметь двунаправленное отображение, поскольку 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...