NamedJDBCTemplate批量插入与对象成员

时间:2014-02-27 16:18:33

标签: java spring jdbc jdbctemplate

所以为了简单起见,我写了一个我想要做的小例子。我一直无法找到解决方案,但我确信有一个解决方案。我试图将对象列表批量插入到包含其他对象的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语法)。

1 个答案:

答案 0 :(得分:1)

根据您希望通常使用序列或标识列的数据库,以并发安全的方式生成主键的值,请查看此answer的优缺点序列与标识列。

其他方式可用于生成密钥,但这些是最常用的方法。

相关问题