Просматривая, как получить первичный ключ последней вставки с помощью «SELECT LAST_INSERT_ID ()» (которую я не смог запустить - я получаю только количество вставок), я обнаружил следующее: я использую класс, описывающий столбцы таблицы для вставки. Одним из атрибутов этого класса является первичный ключ. Для вставки это не используется, потому что первичный ключ автоинкрементирован. Но после вставки он содержит, в моем случае, новый первичный ключ.
Образец:
public class AbsenceJournalType {
protected long primaryKey;
@XmlElement(required = true)
@XmlSchemaType(name = "date")
protected XMLGregorianCalendar timestamp;
@XmlElement(required = true)
protected String employeeId;
@XmlElement(required = true)
protected String authorizer;
Картограф описывает вставку так:
<insert id="insertAbsence"
parameterType="de.gombers.timetracker.shared.dto.AbsenceJournalType">
INSERT INTO `app_absence_journal`
(
`timestamp`, `employeeId`,
`authorizer`,
`
)
VALUES( #{timestamp,
javaType=javax.xml.datatype.XMLGregorianCalendar, jdbcType=DATE,
typeHandler=de.gombers.timetracker.shared.ibatis.CustomDateTypeHandler},
#{employeeId},
#{authorizer},
Таблица определена так:
CREATE TABLE `app_absence_journal` (
`primaryKey` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',
`timestamp` DATETIME NOT NULL COMMENT 'timestamp when edited',
`employeeId` VARCHAR(50) NOT NULL COMMENT 'referenced person - MasterData ID',
`authorizer` VARCHAR(50) NULL DEFAULT NULL COMMENT 'authorizers Master Data ID',
Я определил сопоставление столбцов с классом, хотя здесь оно не используется со вставкой:
<resultMap id="AbsenceJournalTypeMap"
type="de.gombers.timetracker.shared.dto.AbsenceJournalType">
<result property="ajid" column="ajid" />
<result property="timestamp" column="timestamp"
typeHandler="de.gombers.timetracker.shared.ibatis.CustomDateTypeHandler" />
<result property="employeeId" column="employeeid" />
После вставки поле primaryKey содержит правильный автоинкрементированный primaryKey. Интересно, это надежное поведение? Кто-нибудь знает? Я не нашел ни одной записи, упоминающей это.