Hibernate удалить пользователя и user_type вместо удаления только пользователя - PullRequest
0 голосов
/ 26 мая 2019

Я разрабатываю веб-приложение с пружинами и angular7. Я заметил, что что-то происходит ... У меня есть общие DAO и общие службы для выполнения операций CRUD. Когда я делаю удаление пользователя с X id (например, но это происходит со всеми сущностями), тип пользователя с X id также удаляется! но этот тип пользователя не был типом пользователя, которого я хотел удалить.

Я хотел удалить этого пользователя:

User {id: 5, name: hector, pass: blabla, id_user_type: {id: 2, desc: Admin}}

Сервер удалил этого пользователя, а тип пользователя с идентификатором 5 -> user type{id: 5, desc: Anonymous}

Я проверил «При удалении установить ноль» и «При каскаде обновления» в phpmyadmin, и он правильно настроен.

Я отладил общий метод удаления DAO, и он вызывается только один раз.

Я думаю, что это проблема hibernate, я должен указать, что хочу удалять только тот объект, который я указал в методе, а не его дочерние элементы.

Общий Удалить Дао:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Override
    public <T> String delete(final T o) {
        sessionFactory.getCurrentSession().delete(o);
        return "Deleted";
    }

Организация:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.SecondaryTable;
import javax.persistence.SecondaryTables;
import javax.persistence.Table;

import org.hibernate.annotations.DynamicUpdate;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.sun.istack.NotNull;

@Entity()
@Table(name="usuario")
@SecondaryTables({
    @SecondaryTable(name = "tipo_usuario", pkJoinColumns = { @PrimaryKeyJoinColumn(name = "id") })
})
@DynamicUpdate(value=true)
public class UsuarioBean {


...


@ManyToOne()
    @JoinColumn(name = "id_tipo_usuario")
    @NotNull
    private TipoUsuarioBean id_tipo_usuario;


...

}


Я хочу удалить только этого пользователя, а в спящем режиме удалить строку пользователя (id = 14) и строку user_type (id = 14):

enter image description here

1 Ответ

0 голосов
/ 26 мая 2019

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

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