GenerationType.TABLE:数据库中的大数字

时间:2017-03-27 09:44:47

标签: java spring hibernate jpa

我有一个名为Log的接口和两个子类DescriptiveLogTraceabilityLog 所以我想为每个子类创建表。 我的界面就像:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

public abstract class Log implements Serializable {


    @Id
    @GeneratedValue(strategy= GenerationType.TABLE)
    private Long id;
    private Date date;
    private String actor;
    ...
}

和我的子类:

@Entity
public class DescriptiveLog extends Log {
    private String description;
    ...
}

@Entity
public class TraceabilityLog extends Log {

    @OneToMany(mappedBy="traceabilityLog")
    private Collection<TraceabilityLogItem> traceabilityLogItems;
}

DataBase我有另一个名为hibernate_sequence的表,一个属性Log 当我保存可跟踪性或描述性日志时,我在数据库中看到它们的ID中的值为24535 所以我想把它们分开。

1 个答案:

答案 0 :(得分:1)

在我看来,如果你想使用表策略为你的表生成id,你需要给JPA提供者(在你的情况下是hibernate)更多的信息。

假设您的hibernate_sequence表格有seq_name来保存主要列名,而seq_val用于保存下一个可用的ID,那么您的映射应该是这样的:

@TableGenerator(name = "LogGen", table = "hibernate_sequence",
                pkColumnName = "seq_name", valueColumnName = "seq_val", allocationSize = 1)
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "LogGen")
private Long id;

如果您刚刚创建了日志表,则可以将日志表的seq_val设置为1.