在我添加了一个或多个带有数据库映射(JPA/hibernate)的类之后,我希望Hibernate打印出必要的模式更新,以便我可以在数据库上执行它们(例如通过FlyWay).我不希望更新自动执行.
唯一能够对此进行控制的属性如下
org.hibernate.tool.hbm2ddl=validate|update|create|create-drop|none
Run Code Online (Sandbox Code Playgroud)
我不想自动更新/更改任何内容.我想将此设置为验证或无.当我这样做时,我无法看到生成的架构.
我是经典的spring应用程序,我以前用hibernate SchemaExport类来打印DDL.
SchemaExport schemaExport = new SchemaExport(cfg);
schemaExport.execute(true, false, false, false);
Run Code Online (Sandbox Code Playgroud)
我可以在Spring Boot中使用类似的东西吗?
当通过Java代码添加新的模型/字段等时,JPA/Hibernate的自动模式生成是否可以生成新的Flyway迁移.
捕获自动生成的SQL并将其直接保存到新的Flyway迁移,以便查看/编辑/提交到项目存储库将非常有用.
提前感谢您提供的任何帮助或启发.
我想使用带有JPA - Hibernate 5.0.11的spring boot v1.4.3生成create和drop ddl脚本.
我找到的大多数答案都使用了javax.persistence.schema-generation属性.例如/sf/answers/2587649361/
这种方法的问题是它输出没有分隔符的sql语句.例如
create table ... (...)
create table ... (...)
Run Code Online (Sandbox Code Playgroud)
我希望它用分隔符输出语句 ;
create table ... (...);
create table ... (...);
Run Code Online (Sandbox Code Playgroud)
但我找不到任何javax.persistence.schema-generation属性来配置它.
所以我想使用SchemaExportfrom hibernate,因为你可以设置delimiter属性.但要创建一个SchemaExport我需要一个MetadataImplementor(非删除的api).
我无法弄清楚如何MetadataImplementor从春季靴子中获得一个.
有没有人知道是否有
javax.persistence.schema-generation用于定义分隔符的属性SchemaExport(获取依赖项)这是您可以使用的一些代码
@SpringBootApplication
@ComponentScan(basePackageClasses = Application.class)
@EntityScan(basePackageClasses = User.class)
public class Application {
@Bean
public ApplicationRunner getApplicationRunner() {
return new ApplicationRunner() {
public void run(ApplicationArguments args) throws Exception …Run Code Online (Sandbox Code Playgroud) 也许这是一个过于简单的问题,但是当我尝试删除用户实体时,我遇到了异常.
用户实体:
@Entity
@Table(name = "users")
public class User
{
@Transient
private static final int SALT_LENGTH = 32;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@NotNull
private String firstName;
@NotNull
private String lastName;
@Column(unique = true, length = 254)
@NotNull
private String email;
// BCrypt outputs 60 character results.
@Column(length = 60)
private String hashedPassword;
@NotNull
private String salt;
private boolean enabled;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(updatable = false)
private Date createdDate;
Run Code Online (Sandbox Code Playgroud)
我有一个实体类,它引用具有外键的用户.我想要发生的是,当用户被删除时,任何PasswordResetToken引用该用户的对象也将被删除.我怎样才能做到这一点?
@Entity
@Table(name = "password_reset_tokens")
public class PasswordResetToken …Run Code Online (Sandbox Code Playgroud) 我正在使用JPA生成用于基于我的实体创建数据库表的脚本:
javax.persistence.schema-generation.scripts.action=create
javax.persistence.schema-generation.scripts.create-target=db_setup.sql
Run Code Online (Sandbox Code Playgroud)
该文件是用正确的表生成的,但是语句不以分号结尾,例如:
create table hibernate_sequence (next_val bigint)
insert into hibernate_sequence values ( 1 )
insert into hibernate_sequence values ( 1 )
Run Code Online (Sandbox Code Playgroud)
我认为这在标准SQL中有效吗?但是,它在MySQL中无效。有没有办法告诉JPA将分号添加到行尾?还是缺少它的原因是什么?