相关疑难解决方法(0)

Spring启动和Hibernate:打印/日志DDL

在我添加了一个或多个带有数据库映射(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 spring hibernate jpa spring-boot

12
推荐指数
1
解决办法
1万
查看次数

为Flyway自动生成迁移SQL

当通过Java代码添加新的模型/字段等时,JPA/Hibernate的自动模式生成是否可以生成新的Flyway迁移.

捕获自动生成的SQL并将其直接保存到新的Flyway迁移,以便查看/编辑/提交到项目存储库将非常有用.

提前感谢您提供的任何帮助或启发.

java hibernate jpa flyway spring-boot

9
推荐指数
2
解决办法
2458
查看次数

使用自定义分隔符生成具有弹簧引导的DDL

我想使用带有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)

ddl spring hibernate spring-data-jpa spring-boot

7
推荐指数
2
解决办法
2909
查看次数

Spring数据JPA:如何启用级联删除而不引用父级中的子级?

也许这是一个过于简单的问题,但是当我尝试删除用户实体时,我遇到了异常.

用户实体:

@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)

java mysql jpa spring-data-jpa spring-boot

6
推荐指数
2
解决办法
9502
查看次数

JPA生成的SQL脚本的行尾缺少分号

我正在使用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将分号添加到行尾?还是缺少它的原因是什么?

java mysql sql jpa

4
推荐指数
1
解决办法
981
查看次数

标签 统计

java ×4

jpa ×4

spring-boot ×4

hibernate ×3

mysql ×2

spring ×2

spring-data-jpa ×2

ddl ×1

flyway ×1

sql ×1