Spring-Hibernate-JPA-单表||通过区分符列获取实体

问题描述 投票:0回答:1

我正在使用单表继承,并尝试通过其鉴别符列获取实体,但出现错误...我在课程中没有区分值作为字段。

这是我的代码:

用户类别

@Entity
@Table(name = "MT_User")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "userType", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue("CLASSIC")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int uid;

    public String imageFileName;

    private String pseudo;

    private String email;

    private String password;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "MT_User_Playlist", joinColumns = @JoinColumn(name = "uid"), inverseJoinColumns = @JoinColumn(name = "tlid"))
    private List<Playlist> playlists;

...

}

[管理员类别]

@Entity
@DiscriminatorValue("ADMIN")
public class Admin extends User implements SuperUser {

//no fields

...

}

用户存储库] >>

public interface UserRepository extends CrudRepository<User, Integer> {

    User findByPseudo(String pseudo);

    User findByEmail(String email);

    void deleteByPseudo(String pseudo);

    void deleteByEmail(String email);

    List<User> findByUserType(String userType);

    @Query("from mt_user where user_type=ADMIN")
    List<User> findAdmins();

    @Query("from mt_user where user_type=ADMIN and pseudo=?1")
    User findAdminByPseudo(String pseudo);
}

这里是我得到的错误:

Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: mt_user is not mapped [from mt_user where user_type=ADMIN and pseudo=?1]

Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: mt_user is not mapped [from mt_user where user_type=ADMIN]

Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List org.ThePouil.projects.mytunes.DAO.UserRepository.findByUserType(java.lang.String)! No property userType found for type User!

感谢您的帮助!

我正在使用单表继承,并尝试通过它们的discriminator列获取实体,但出现错误...我在类中没有discriminator值作为字段。这是我的代码:...

spring hibernate jpa single-table-inheritance discriminator
1个回答
0
投票

您应该在查询中使用@Entity的类名,而不要使用表名。它应该是from Adminfrom User

© www.soinside.com 2019 - 2024. All rights reserved.