2017-10-09 78 views
0

我正在使用@EntityCrudRepository在我的MySQL数据库中创建一个条目,我想知道@GeneratedValue(strategy = GenerationType.AUTO)在什么时候执行并生成自动增量值?@GenerateValue在休眠时执行什么时候执行

@Entity 
    @Table(name = "all_contacts") 
    public class Contact { 

     //Ideally this would be set as foreign key to application's user schema 
     private long userId; 

     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     @Column(name="contactid") 
     private long contactId; 

     @NotNull 
     private String name; 

    //getters and setters 

    } 

//

public interface ContactRepository extends CrudRepository<Contact, Long> { } 

我问,因为我想访问contactId通过其吸气剂的价值,但我必须要等到ContactRepository.save()叫?

回答

1

在执行SQL INSERT语句之前,我们无法知道该实体的新分配标识。

所以,是的,你需要ContactRepository.save()或任何触发SQL INSERT语句的命令才能获得该ID。但保存更好,因为它保证它会始终返回ID。

0

执行SQL插入语句后,我们会获取生成的值。我们无法知道save()之前的值是被分配的。 GenerationType.AUTO号码生成器为实体对象生成自动对象ID,并将此生成的数值用于主键字段。

@Entity 
public class Entity { 
    @Id @GeneratedValue(strategy=GenerationType.AUTO) int id; 

}