所以为了简单起见,我写了一个我想要做的小例子。我一直无法找到解决方案,但我确信有一个解决方案。我试图将对象列表批量插入到包含其他对象的id的表中。很难解释,但如果你看一下代码,我应该很容易看到我想要做的事情:
public class Person{
private Long id;
private String firstName;
private String lastName;
private Animal animal;
... {getters/setters}
}
public class Animal{
private Long id;
private String species;
private String name;
... {getters/setters}
}
我的代码中的某处:
List<Person> people = someList;
personsRepository.save(people);
我的存储库:
public class PersonsRepository{
@Autowired(required=true)
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public void save(List<Person> people)
{
String sql = "insert into PERSONS(ID, FIRST_NAME, LAST_NAME, ANIMAL_ID) VALUES(:id, :firstName, :lastName, {{ animal.id }})";
SqlParameterSource[] parameterSource = SqlParameterSourceUtils.createBatch(people.toArray());
namedParameterJdbcTemplate.batchUpdate(sql, parameterSource);
}
}
您将在我的存储库中注意到,我需要插入ANIMAL_ID。如何使用批量插入执行此操作?我在prod中使用oracle db,但在本地使用hsql(使用oracle语法)。
答案 0 :(得分:1)
根据您希望通常使用序列或标识列的数据库,以并发安全的方式生成主键的值,请查看此answer的优缺点序列与标识列。
其他方式可用于生成密钥,但这些是最常用的方法。