Spring Boot:多次遇到导出标识符

R.S*_*fer 4 java hibernate spring-boot

出现以下错误

Caused by: org.hibernate.tool.schema.spi.SchemaManagementException:Export identifier [order_signal] encountered more than once
Run Code Online (Sandbox Code Playgroud)

我有以下课程:

Tradingbot.persistence.model.order.TransactionComponent

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class TransactionComponent {
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    @Column(name = "id", updatable = false, nullable = false)
    protected Long id;

    ...
}
Run Code Online (Sandbox Code Playgroud)

Tradingbot.persistence.model.order.OrderSignal

@Entity
@JsonRootName("OrderSignalDAO")
public class OrderSignal extends TransactionComponent {
    ...
}
Run Code Online (Sandbox Code Playgroud)

Tradingbot.persistence.model.order.TransferSignal

@Entity(name = "TransferSignal")
public class TransferSignal extends TransactionComponent {
    ....
}
Run Code Online (Sandbox Code Playgroud)

在 OrderSignal 类中没有其他 @Id,并且 TransactionComponent 中也没有 id 的 getter/setter。

为什么会出现这个错误?这是什么意思?如何修复它?

Hru*_*ath 7

我遇到的发生上述问题的一种情况是实体类如下

`@Entity
 @Table(name = "universe")
 public class Universe {
    @GenericGenerator(
            name = "universeSequenceGenerator",
            strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
            parameters = {
                    @Parameter(name = "sequence_name", value = "universe"),
                    @Parameter(name = "initial_value", value = "1"),
                    @Parameter(name = "increment_size", value = "1")
            }
    )
    @Id
    @GeneratedValue(generator = "universeSequenceGenerator")
    private Integer id;
    private String name; 
    ....`
Run Code Online (Sandbox Code Playgroud)

在上面的场景中,会抛出以下错误,原因是:org.hibernate.tool.schema.spi.SchemaManagementException:Export identifier [universe] encountered more than once

这是因为 @Parameter(name = "sequence_name", value = "universe"),当我们将其更改为错误时@Parameter(name = "sequence_name", value = "universeSeq"),错误就会消失。如果实体名称与参数名称等中的任何位置匹配。那么这可能会发生。