Как расширить класс в Spring Boot, не меняя схему MySQL? - PullRequest
0 голосов
/ 15 октября 2019

Например, у меня есть класс User, который выглядит следующим образом:

    @Entity
    @Table(name = "users")
    public class User{
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")
        private Long id;

        @NotBlank
        @Size(max = 40)
        @Column(name = "name")
        private String name;

        @NotBlank
        @Size(max = 15)
        @Column(name = "username")
        private String username;

        @NaturalId
        @NotBlank
        @Size(max = 40)
        @Email
        @Column(name = "email")
        private String email;

        @NotBlank
        @Size(max = 100)
        @Column(name = "password")
        private String password;

        @ManyToMany(fetch = FetchType.LAZY)
        @JoinTable(name = "user_roles",
                joinColumns = @JoinColumn(name = "user_id"),
                inverseJoinColumns = @JoinColumn(name = "role_id"))
        private Set<Role> roles = new HashSet<>();

//Constructor
//Getters and Setters

И у меня есть класс Client:

@Entity
@Table(name = "cliente")
public class Cliente {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;
    @Column(name = "empresa")
    private String empresa;
    @Column(name = "telefono")
    private Integer telefono;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(unique = true)
    private Licencia licencia;

    @OneToMany(cascade = {
            CascadeType.PERSIST,
            CascadeType.REMOVE
    } ,fetch = FetchType.EAGER)
    @JoinTable(name = "user_cliente",
            joinColumns = @JoinColumn(name = "cliente_id"),
            inverseJoinColumns = @JoinColumn(name = "user_id"))
    private Set<User> users = new HashSet<>();

    public Cliente(String empresa, Integer telefono) {
        this.empresa = empresa;
        this.telefono = telefono;
    }

//Constructor
//Getters and Setters

Теперь, что я хочу сделатьявляется классом Client, расширяющим класс User, поэтому я могу добавить Client с именем, именем пользователя, адресом электронной почты и т. д. Но мне нужны две отдельные таблицы в MySQL: одна для пользователей и ее атрибутов, а другая для клиентов только с информациейклиента, как телефон или компания. Проблема в том, что когда я расширяю класс User в классе Client, базы данных MySQL обновляются и создают поля phone, company и т. Д. В таблице User. Как я могу избежать этого?

1 Ответ

2 голосов
/ 15 октября 2019

Используйте @MappedSuperclass:

@MappedSuperclass
public class BaseEntity {
    // here you can add common fields for your entities
}

, а затем расширяйте его:

@Entity
public class User extends BaseEntity {
    // user specific fields goes here
}

и Client:

@Entity
@Table(name = "cliente")
public class Cliente extends BaseEntity {
    // client specific fields here
}

Для получения дополнительной информации читайте Как наследовать свойства от сущности базового класса, используя @MappedSuperclass с JPA и Hibernate

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