我正在使用@Entity
和CrudRepository
在我的MySQL数据库中创建一个条目,我想知道@GeneratedValue(strategy = GenerationType.AUTO)在什么时候执行并生成自动增量值?
@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> { }
我问,因为我想通过其getter访问contactId
的值,但我是否必须等到ContactRepository.save()
被调用?
答案 0 :(得分:1)
在执行SQL INSERT语句之前,我们无法知道该实体的新分配ID。
所以,是的,您需要ContactRepository.save()
或任何触发SQL INSERT语句的命令才能获得该ID。但保存更好,因为它可以保证始终返回ID。
答案 1 :(得分:0)
执行SQL insert语句后,我们得到生成的值。在save()之前,我们无法知道值的结果。 GenerationType.AUTO 数字生成器为实体对象生成自动对象ID,此生成的数值用于主键字段。
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Arrays.stream("hello how are you".split(" ")).forEach(s -> list.add(s));
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
if (s.startsWith("a")) {
it.remove();
} else {
System.out.println(s);
}
}
System.out.println(list);
ListIterator<String> lit = list.listIterator();
while (lit.hasNext()) {
String s = lit.next();
if (s.startsWith("a")) {
lit.set("1111" + s);
} else {
System.out.println(s);
}
}
System.out.println(list);
}