Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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_Spring Mvc_Spring Boot_Mysqli - Fatal编程技术网

Java springboot自动生成MySQL数据库

Java springboot自动生成MySQL数据库,java,spring-mvc,spring-boot,mysqli,Java,Spring Mvc,Spring Boot,Mysqli,我正在尝试根据POJO类自动生成数据库: 控制器型号: @Entity @Table(name = "director") public class Director extends AuditModel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Long id; @Column(name = "name", nullab

我正在尝试根据POJO类自动生成数据库:

控制器型号:

@Entity
@Table(name = "director")
public class Director extends AuditModel {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "name", nullable = false)
    private String name;

    @Column(name = "age", nullable = false)
    private int age;

    @Column(name = "description", nullable = false)
    private String description;

    @Column(name = "photo", nullable = false)
    private String photo;

    //Getters & Setters
}
@Entity
@Table(name = "movie")
public class Movie extends AuditModel {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "name", nullable = false)
    private String name;

    @Column(name = "story", nullable = false)
    private String story;

    @Column(name = "photo", nullable = false)
    private String photo;

    @Column(name = "releaseYear", nullable = false)
    private int releaseYear;

    @Column(name = "rating", nullable = false)
    private float rating;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "director", nullable = false)
    @OnDelete(action = OnDeleteAction.CASCADE)
    private Director director;

    //Getters & Setters
}
电影模式:

@Entity
@Table(name = "director")
public class Director extends AuditModel {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "name", nullable = false)
    private String name;

    @Column(name = "age", nullable = false)
    private int age;

    @Column(name = "description", nullable = false)
    private String description;

    @Column(name = "photo", nullable = false)
    private String photo;

    //Getters & Setters
}
@Entity
@Table(name = "movie")
public class Movie extends AuditModel {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "name", nullable = false)
    private String name;

    @Column(name = "story", nullable = false)
    private String story;

    @Column(name = "photo", nullable = false)
    private String photo;

    @Column(name = "releaseYear", nullable = false)
    private int releaseYear;

    @Column(name = "rating", nullable = false)
    private float rating;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "director", nullable = false)
    @OnDelete(action = OnDeleteAction.CASCADE)
    private Director director;

    //Getters & Setters
}
在这里,审计模型具有时间字段,如created_at

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"}, allowGetters = true)
public abstract class AuditModel implements Serializable {
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "created_at", nullable = false, updatable = false, columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
    @CreatedDate
    private Date createdAt;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "updated_at", nullable = false, columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
    @LastModifiedDate
    private Date updatedAt;

    // Getters & Setters
}
这是我在应用程序.properties中的配置

spring.datasource.url=jdbc:mysql://localhost:3306/spring_boot_movies
spring.datasource.username=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.jackson.serialization.fail-on-empty-beans=false
我正在使用
spring.jpa.hibernate.ddl auto=update
自动生成数据库。
现在数据库生成良好,但外键生成为简单的整数字段。

这是正确的行为。在数据库中,foregin键引用其他表中的主键。在您的例子中,它是一个整数。ORM框架将主-外键关系转化为对象关联(反之亦然)

你有很多人,但导演课上少了一个

在Director类中,您应该添加如下内容

@OneToMany
@JoinColumn(name = “director”)
private List<Director> items;
@OneToMany
@JoinColumn(name=“director”)
私人清单项目;
您可以尝试
spring.jpa.hibernate.ddl auto=create


它将删除所有MySQL表并创建新表。稍后更改回
update

是的,但当我检查数据库时,没有外键,只是一个整数字段,我可以在没有任何导演的情况下输入新的电影记录,我可以在导演字段中输入我想要的任何值,这是错误的!但是查询成功执行了!您可以将其输入数据库,因为并没有自动生成的完整性约束。但若你们试图在应用程序中创建电影实体并将其保存到数据库中,你们会得到一个错误。。。生成外键时一定有错误。您可以添加此属性以在控制台中启用mysql查询。。spring.jpa.show sql=true对于作为简单整数字段生成的外键,您是否尝试在ID的顶部添加@Type(Type=“long”)?