Java springboot自动生成MySQL数据库
我正在尝试根据POJO类自动生成数据库: 控制器型号: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
@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”)?