如何在Spring Data的代码中使用自动生成的id?

时间:2017-05-23 05:53:35

标签: java database hibernate spring-data spring-data-jpa

创建实体时,它通常会为主键接收一些自动生成的int值。我有一个名为'Attribute'的实体,它可以有一个相关的'参数'实体列表。

@Entity
@Table(name = "ATTRIBUTES")
public class Attribute {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "ATTRIBUTE_ID", length = 10, nullable = false)
    private int id;

    @Column(name = "NAME")
    private String name;

    @JsonIgnore
    @LazyCollection(LazyCollectionOption.FALSE)
    @OneToMany(mappedBy = "attribute", cascade = CascadeType.ALL)
    private List<Parameter> parameters;

接下来我有一个名为'参数'的实体需要与'属性'链接。所以当我创建一个'参数'时,我需要指定它的'属性'。 我怎么做?有什么诀窍?

@Entity
@Table(name = "PARAMS")
public class Parameter {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "PARAMETER_ID", length = 10, nullable = false)
    private int id;

    @JsonIgnore
    @ManyToOne
    @JoinColumn(name = "ATTRIBUTE_ID", referencedColumnName = "ATTRIBUTE_ID")
    private Attribute attribute;

    @Column(name = "VALUE")
    private String value;

1 个答案:

答案 0 :(得分:1)

您的问题尚不清楚,但我认为您要求创建一个参数实例而不需要手头的属性实例?您必须具有ATTRIBUTE_ID,因为它可能不为空,并且有多种方法可以继续。假设您已经有一个属性实例,您可以明确地将它的主键添加为参数的属性,例如

@Column(nullable=false, name="ATTRIBUTE_ID")
private Integer attributeId;

当然会创建getter / setter并明确设置id。如果你有一个属性实例,你可以在属性中添加参数并使用级联持久性,还有其他策略。