Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在带有Spring数据的代码中使用自动生成的id?_Java_Database_Hibernate_Spring Data_Spring Data Jpa - Fatal编程技术网

Java 如何在带有Spring数据的代码中使用自动生成的id?

Java 如何在带有Spring数据的代码中使用自动生成的id?,java,database,hibernate,spring-data,spring-data-jpa,Java,Database,Hibernate,Spring Data,Spring Data Jpa,创建实体时,它通常会收到一些自动生成的主键int值。我有一个名为“属性”的实体,它可以有一个相关“参数”实体的列表 @Entity @Table(name = "ATTRIBUTES") public class Attribute { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name = "ATTRIBUTE_ID", length = 10, nullable = false)

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

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

您的问题不清楚,但我想您是在询问如何创建参数实例,而不创建属性实例?您必须有一个属性_ID,因为它可能不为null,并且有多种方法可以继续。假设您已经有一个属性实例,您可以显式地将它的主键添加为参数的属性,例如

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

当然,还要创建getter/setter并显式设置id。如果您有一个属性实例,那么还有其他策略,您可以在属性中添加参数并使用级联持久化。

参数
实体中使用
@ManyToOne(可选=false)
。在这种情况下,
属性
不能为null。不完全是。例如,我需要在已经存在的“属性”中添加一个“参数”。我可以通过findById方法在JPA存储库的帮助下获得该“属性”,但我如何知道要查找的id?很抱歉,我在理解您的问题时遇到了一些困难。如果您有一个现有属性,那么您也有一个ID(您在findById中使用的ID?),并且您在该属性上也有一个getter,或者您应该按照我在前面的回答中提到的类似方式创建一个getter。我想我并没有真正回答你的问题,因为我还不清楚。好吧,我真的很迷茫,所以我可能听起来很随意。但让我们想象一种情况。表“ATTRIBUTES”暂时不存在。我启动我的应用程序,表自动创建,一些属性(比如说它有名称“Details”)也由一些初始化脚本创建。我需要将此属性添加到我的对象中,然后指定参数,但我如何知道此属性将具有什么id?属性的id由序列决定,并且是技术信息。如果是由数据库脚本创建的,您不知道id。您必须通过另一个参数搜索属性,例如name='Details'。如果在事务下用Java创建实体,那么在持久化实体时将生成id,并可以使用相应的getter查看它。要进行查询,可能需要使用EntityManager或Spring数据存储库。
@Column(nullable=false, name="ATTRIBUTE_ID")
private Integer attributeId;