Java EE Hibernate List Ошибка настройки многих ко многим

Я делаю веб-приложение java ee. У меня есть классы пользователей и разрешений, а в классе пользователей есть список этих типов разрешений. Когда hibernate получает базу данных формы пользовательского объекта, я также хочу получить разрешения пользователя из таблицы user_permission. Пользователь и разрешение имеют отношение «многие ко многим». Я использую Hibernate 5.4.1. При настройке SessionFactory я получаю эту ошибку:

java.lang.NullPointerException
    org.hibernate.boot.model.source.internal.hbm.ModelBinder$AbstractPluralAttributeSecondPass.bindCollectionElement(ModelBinder.java:3557)
    org.hibernate.boot.model.source.internal.hbm.ModelBinder$AbstractPluralAttributeSecondPass.doSecondPass(ModelBinder.java:3136)
    org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1684)
    org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1652)
    org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:286)
    org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
    org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:473)
    org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:84)
    org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:689)
    org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)

мой пользовательский класс:

public class User
{
    private int id;
    private String name;
    private String password;
    private List<Permission> permissions;
    public User(){}
    public User(String name,String password)
    {
        this.name=name;
        this.password=password;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name=name;
    }
    public String getPassword()
    {
        return password;
    }
    public void setPassword(String password)
    {
        this.password=password;
    }
    public int getId()
    {
        return id;
    }
    public void setId(int id)
    {
        this.id=id;
    }
    public void clearPermissions()
    {
        permissions.clear();
    }
    public boolean hasPermission(Permission permission)
    {
        return permissions.contains(permission);
    }
    public void addPermission(Permission permission)
    {
        permissions.add(permission);
    }
    public void deletePermission(Permission permission)
    {
        permissions.remove(permission);
    }
    public List<Permission> getPermissions()
    {
        return permissions;
    }
    public void setPermissions(List<Permission> permissions)
    {
        this.permissions = permissions;
    }
}

отображение класса пользователя:

<?xml version = "1.0" encoding = "UTF-8"?>
<hibernate-mapping>
    <class name = "model.User" table = "user">
        <id name = "id" type = "int" column = "id">
            <generator class = "identity"/>
        </id>
        <property name = "name" column = "name" type = "string"/>
        <property name = "password" column = "password" type = "string"/>
        <list name = "permissions" table = "user_permission" lazy = "false">
            <key column = "user_id"/>
            <index column = "id"/>
            <many-to-many class = "Permission" column = "permission_id"/>
        </list>
    </class>
</hibernate-mapping>

мой класс разрешений:

public class Permission
{
    private int id;
    private String name;
    public Permission() {}
    public Permission(int id, String name)
    {
        this.id=id;
        this.name=name;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name=name;
    }
    public int getId()
    {
        return id;
    }
    public void setId(int id)
    {
        this.id=id;
    }
    public boolean equals(Object obj)
    {
        return ((Permission)obj).id==id;
    }
}

Сопоставление классов разрешений:

<?xml version = "1.0" encoding = "UTF-8"?>
<hibernate-mapping>
    <class name = "model.Permission" table = "permission">
        <id name = "id" type = "int" column = "id">
            <generator class = "identity"/>
        </id>
        <property name = "name" column = "name" type = "string"/>
    </class>
</hibernate-mapping>

это должно быть один ко многим не многие ко многим

Naveen Kulkarni 05.03.2019 07:52

Но в базе данных таблицы пользователей и разрешений многие ко многим. Потому что разрешение может быть предоставлено многим пользователям, и у пользователя может быть много разрешений.

tunc 05.03.2019 08:09

в отношениях «многие ко многим» мы получаем третью таблицу, где она определена?

Naveen Kulkarni 05.03.2019 08:27

Имя третьей таблицы — «user_permission». Эта таблица имеет 3 столбца: id,user_id,permission_id

tunc 05.03.2019 08:29

в теге «многие ко многим» class=Permission измените его на model.Permission

Naveen Kulkarni 05.03.2019 08:36

О спасибо решил мою проблему

tunc 05.03.2019 08:37
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
6
225
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В сопоставлении многие ко многим отсутствует имя пакета. Измените его с Permission на model.Permission. Это должно решить проблему. Ниже sippet

<class name = "model.User" table = "user">
    <id name = "id" type = "int" column = "id">
        <generator class = "identity"/>
    </id>
    <property name = "name" column = "name" type = "string"/>
    <property name = "password" column = "password" type = "string"/>
    <list name = "permissions" table = "user_permission" lazy = "false">
        <key column = "user_id"/>
        <index column = "id"/>
        <many-to-many class = "model.Permission" column = "permission_id"/>
    </list>
</class> </hibernate-mapping>

Другие вопросы по теме

Похожие вопросы

Рекурсивный запрос MySQL с дочерним значением
Проблема обещаний: попытка обернуть запросы mysql для использования в NodeJS/Express
Uncaught mysqli_sql_exception: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильности
Загрузка только имени изображения вместе с некоторыми данными в базу данных, и только изображение должно храниться в папке в веб-контенте
Доступ запрещен для пользователя 'root'@'localhost' (с использованием пароля: YES), если строка authentication_string верна
Как получить значение из таблицы1, выполнить поиск в таблице2, а после нахождения - получить значение строки первого значения?
Как выбрать данные выбранного месяца
Я получаю исключение «не удалось найти драйвер» при сборке моего приложения laravel в gitlab CI
Почему мой почтовый метод не работает должным образом
Удалить запрос не работает (без ошибок/синтаксических ошибок)