Hibernate: операции с таблицами в отношении один-к-одному (REST API) - PullRequest
0 голосов
/ 24 марта 2020

Я новичок в структуре отношений с базой данных. И у меня есть некоторые проблемы с этим. Моя база данных имеет такую ​​структуру (см. Img)

enter image description here

Я хочу организовать свой CRUD для этих таблиц с помощью Hibernate. Я установил для них «One-To-One».

В моем проекте возникает ситуация, когда я хочу обновить только одну таблицу, иногда только одно поле в одной таблице. Я управлял только родительской таблицей, и у меня была проблема с обновлением childs. Я изменил позицию внешнего ключа с «utilisateur» на «utilisateur_details», но я не уверен, что это хорошая идея.

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

Например: у меня есть строки в "compte". У меня есть данные в "utilisateur_details". И я хочу изменить «first_name» в «utilisateur_details» и добавить данные в таблицы «ville» и «departement». Рекомендуется ли иметь ResControllers для всех таблиц для управления каждой таблицей с каждым контроллером, или мне нужен только один контроллер для родительской таблицы, и я могу управлять другими таблицами с этой.

Итак, я разместил здесь свои сущности. Я использую Spring Boot и Rest API.

@Entity
@Table(name = "utilisateur", schema = "vshop_schema")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "adresse_ip")
    private int adressIP;

    @OneToMany(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, mappedBy = "user")
    private Set<Annonce> annonces;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "compte_id")
    private Account account;


    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL,
            fetch = FetchType.LAZY, optional = false)
    private UserDetails userDetails;


    public User() {
    }
   getters and setters
}


@Entity
@Table(name = "compte", schema = "vshop_schema")
@DynamicUpdate
public class Account {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "email")
    private String email;

    @Column(name = "pass")
    private String password;



    public Account() {
    }
  getters and setters
 }


@Entity
@Table(name = "utilisateur_details", schema = "vshop_schema")
@DynamicUpdate
public class UserDetails {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "first_name")
    private String firstName;

    @Column(name = "last_name")
    private String lastName;

    @Column(name = "dob")
    @JsonFormat(pattern="dd/MM/yyyy")
    private Date dob;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "ville_id")
    private Ville ville;



     @OneToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "utilisateur_id")
        private User user;

   public UserDetails() {

    }
 getters and setters
}

Для DAO я использую стандартную систему DAO для операций CRUD.

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