Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在SpringBoot中扩展类而不更改MySQL模式?_Java_Mysql_Hibernate_Spring Boot - Fatal编程技术网

Java 如何在SpringBoot中扩展类而不更改MySQL模式?

Java 如何在SpringBoot中扩展类而不更改MySQL模式?,java,mysql,hibernate,spring-boot,Java,Mysql,Hibernate,Spring Boot,例如,我有一个User类,看起来如下所示: @Entity @Table(name = "users") public class User{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Long id; @NotBlank @Size(max = 4

例如,我有一个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
@实体
@表(name=“users”)
公共类用户{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“id”)
私人长id;
@不空白
@尺寸(最大值=40)
@列(name=“name”)
私有字符串名称;
@不空白
@尺寸(最大值=15)
@列(name=“username”)
私有字符串用户名;
@归化
@不空白
@尺寸(最大值=40)
@电子邮件
@列(name=“email”)
私人字符串电子邮件;
@不空白
@尺寸(最大值=100)
@列(name=“password”)
私有字符串密码;
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=“用户角色”,
joinColumns=@JoinColumn(name=“user\u id”),
inverseJoinColumns=@JoinColumn(name=“role\u id”))
私有集角色=新HashSet();
//建造师
//接球手和接球手
我有客户端类:

@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
@实体
@表(name=“客户”)
公共类客户{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“id”)
私人长id;
@列(name=“empresa”)
私人字符串empresa;
@列(name=“telefono”)
私人整数电话;
@OneToOne(级联=级联类型.ALL)
@JoinColumn(unique=true)
私人许可证;
@OneToMany(级联={
cascade type.PERSIST,
级联类型。删除
},fetch=FetchType.EAGER)
@JoinTable(name=“user\u cliente”,
joinColumns=@JoinColumn(name=“cliente_id”),
inverseJoinColumns=@JoinColumn(name=“user\u id”))
private Set users=new HashSet();
公共客户(String empresa、Integer telefono){
this.empresa=empresa;
this.telefono=telefono;
}
//建造师
//接球手和接球手

现在,我想做的是Client类来扩展User类,这样我就可以添加一个具有名称、用户名、电子邮件等的客户端。但是我希望MySQL中有两个单独的表,一个用于用户及其属性,另一个仅用于具有客户端信息的客户端,如电话或公司。问题是当我在Clie中扩展User类时nt类,MySQL数据库更新并在用户表中创建电话、公司等字段。如何避免这种情况?

使用
@MappedSuperclass

@MappedSuperclass
public class BaseEntity {
    // here you can add common fields for your entities
}
@Entity
@Table(name = "cliente")
public class Cliente extends BaseEntity {
    // client specific fields here
}
然后从中延伸:

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

@MappedSuperclass
public class BaseEntity {
    // here you can add common fields for your entities
}
@Entity
@Table(name = "cliente")
public class Cliente extends BaseEntity {
    // client specific fields here
}

有关更多信息,请阅读使用
@MappedSuperclass

@MappedSuperclass
public class BaseEntity {
    // here you can add common fields for your entities
}
@Entity
@Table(name = "cliente")
public class Cliente extends BaseEntity {
    // client specific fields here
}
然后从中延伸:

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

@MappedSuperclass
public class BaseEntity {
    // here you can add common fields for your entities
}
@Entity
@Table(name = "cliente")
public class Cliente extends BaseEntity {
    // client specific fields here
}

欲了解更多信息,请阅读

,但没有创建超类的方法无法做到这一点?我已经这样做了,但仍在更改sql表。知道原因吗?它不可复制。请更新您的问题,以便我们可以看到您所做的事情,但没有创建超类的方法无法做到这一点?我已经这样做了,但仍在更改sql选项卡你知道为什么吗?这是不可复制的。请更新你的问题,这样我们就可以看到你做了什么