Liquibase - Spring数据:与自身实体的OneToOne关系不起作用

时间:2016-04-21 16:33:00

标签: java spring-data liquibase

我有一个实体:

@Entity
@Table(name = "society")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Society implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

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

我想添加对self的引用,例如:

@OneToOne
private Society parentSociety

当我运行liquibase:diff时,liquibase不会注意到更改,也不会为我的实体的这个新属性创建更改日志文件。

我该怎样做才能使这项工作?

2 个答案:

答案 0 :(得分:0)

根据http://www.liquibase.org/documentation/maven/maven_diff.html liquibase:diff在两个数据库之间生成diff,而不是像你期望的那样在数据库和Hibernate映射之间生成。

答案 1 :(得分:0)

liquibase:diff 命令会在两个指定的数据库之间生成差异。您可以配置数据库和实体之间的生成差异,但首先需要配置pom.xml和liquibase.properties。 对于pom配置,您需要liquibase-hibernate依赖项。我建议您按照本教程,非常简单和工作:

http://www.baeldung.com/liquibase-refactor-schema-of-java-app

更改一个实体并运行liquibase:diff命令时,不要重新记录liquibase工作流程:

  

修改JPA实体(添加字段,关系等)编译应用程序(这适用于编译的Java代码,所以不要忘记编译!)运行mvn liquibase:diff(或mvn compile liquibase:之前编译的diff)在src / main / resources / config / liquibase / changelog目录中创建一个新的“更改日志”查看此更改日志并将其添加到src / main / resources / config / liquibase / master.xml文件中,因此在下次运行应用程序时应用它如果使用Gradle而不是Maven,则可以通过运行./gradlew liquibaseDiffChangelog来使用相同的工作流,并在需要时更改liquibase.gradle中的数据库配置。

所以,如果你在Entity类中更改后使用maven,则需要再次编译...只需执行:清理安装,之后你可以执行liquibase:diff来生成你的liquibase中的changeSet -diff.xml文件