Не работает внутреннее соединение hql-запроса многие ко многим - PullRequest
0 голосов
/ 14 октября 2018

Необходимо сделать выборку данных из связанных таблиц типа отношения «многие ко многим».Как вы можете сделать выбор данных из таблиц в отношениях многие ко многим, используя jpa?Выдает ОШИБКУ error: Table 'tets.usergroup' does not exist.

Я искал ответ в Google, но Google не помог.Я пытался прописать суть по-другому, это тоже не помогло.

   @Entity


    @Table(name = "USERS")
    public class User {
        private long id;
        private String username;
        private String password;
        private String email;   

        private Set<UserGroup> userGroups = new HashSet<UserGroup>();

        public User() {
        }

        public User(String username, String password, String email) {
            this.username = username;
            this.password = password;
            this.email = email;
        }

        public void addGroup(UserGroup group) {
            this.userGroups.add(group);
        }

        @Id
        @GeneratedValue
        @Column(name = "USER_ID")
        public long getId() {
            return id;
        }

        public void setId(long id) {
            this.id = id;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public String getEmail() {
            return email;
        }

        public void setEmail(String email) {
            this.email = email;
        }

        @OneToMany(mappedBy = "user")
        public Set<UserGroup> getUserGroups() {
            return userGroups;
        }

        public void setUserGroups(Set<UserGroup> groups) {
            this.userGroups = groups;
        }

        public void addUserGroup(UserGroup userGroup) {
            this.userGroups.add(userGroup);
        }   
    }

Класс группы пользователей

    @Entity
    @Table(name = "USERS_GROUPS")
    public class UserGroup {
        private long id;
        private User user;
        private Group group;

        // additional fields
        private boolean activated;
        private Date registeredDate;

        @Id
        @GeneratedValue
        @Column(name = "USER_GROUP_ID") 
        public long getId() {
            return id;
        }

        public void setId(long id) {
            this.id = id;
        }

        @ManyToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "USER_ID")   
        public User getUser() {
            return user;
        }

        public void setUser(User user) {
            this.user = user;
        }

        @ManyToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "GROUP_ID")
        public Group getGroup() {
            return group;
        }

        public void setGroup(Group group) {
            this.group = group;
        }

        public boolean isActivated() {
            return activated;
        }

        public void setActivated(boolean activated) {
            this.activated = activated;
        }

        @Column(name = "REGISTERED_DATE")
        @Temporal(TemporalType.DATE)
        public Date getRegisteredDate() {
            return registeredDate;
        }

        public void setRegisteredDate(Date registeredDate) {
            this.registeredDate = registeredDate;
        }

    }`@Entity
    @Table(name = "GROUPS")
    public class Group {
        private long id;
        private String name;

        private Set<UserGroup> userGroups = new HashSet<UserGroup>();

        public Group() {
        }

        public Group(String name) {
            this.name = name;
        }

        @Id
        @GeneratedValue
        @Column(name = "GROUP_ID")
        public long getId() {
            return id;
        }

        public void setId(long id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @OneToMany(mappedBy = "group")
        public Set<UserGroup> getUserGroups() {
            return userGroups;
        }

        public void setUserGroups(Set<UserGroup> groups) {
            this.userGroups = groups;
        }

        public void addUserGroup(UserGroup userGroup) {
            this.userGroups.add(userGroup);
        }

    }`

И какое-то исключение

     ERROR: Table 'tets.usergroup' doesn't exist
    Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not extract ResultSet
        at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82)
        at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
        at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:61)
        at org.hibernate.loader.Loader.getResultSet(Loader.java:2040)
        at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1837)
        at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1816)
        at org.hibernate.loader.Loader.doQuery(Loader.java:900)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:342)
        at org.hibernate.loader.Loader.doList(Loader.java:2526)
        at org.hibernate.loader.Loader.doList(Loader.java:2512)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2342)
        at org.hibernate.loader.Loader.list(Loader.java:2337)
        at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:338)
        at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1833)
        at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:231)
        at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:157)
        at net.codejava.hibernate.Many2ManyTester.select_filter(Many2ManyTester.java:184)
        at net.codejava.hibernate.Many2ManyTester.main(Many2ManyTester.java:216)
    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'tets.usergroup' doesn't exist
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
        at com.mysql.jdbc.Util.getInstance(Util.java:386)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2818)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2157)
        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2324)
        at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:56)
        ... 15 more

1 Ответ

0 голосов
/ 15 октября 2018

Я видел, что вы настраиваете сущность с именем таблицы:

@Table(name = "USERS_GROUPS")

, но ошибка:

error: Table 'tets.usergroup' does not exist

Так что, возможно, вы сделали неправильный запрос.Или вы можете найти все места, которые используют 'usergroup'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...