#java #oracle #annotations #mybatis
#java #Oracle #аннотации #mybatis
Вопрос:
Я пытаюсь выполнить следующее в Java
@Insert("INSERT INTO USERS (ID,NAME,AGE) VALUES(USER_SEQ.NEXTVAL,#{name},#{age})")
@Options(useGeneratedKeys=true, keyProperty="ID", keyColumn="ID")
public int insertUsers(User userBean);
Он должен возвращать новый обобщенный идентификатор, но он всегда возвращает «1», даже если он делает вставку в таблицу надлежащим образом.
Может ли кто-нибудь попробовать это «Получение идентификаторов взамен или вставка в MyBatis (аннотация) с помощью oracle»
Комментарии:
1. Вы пробовали ВОЗВРАЩАЕМОЕ предложение, предлагаемое Oracle? oracle-base.com/articles/misc/dml_returning_into_clause.php
2. Спасибо за ваш ответ, но …. ВОЗВРАЩАЕМОЕ предложение всегда возвращает значение, которое необходимо сохранить в некоторой переменной, но я использую вставку в одну строку вместо того, чтобы использовать процедуру для того же
3. Справедливо, удачи в решении проблемы. 🙂
4. он возвращает 1, поскольку он изменил 1 строку. Проверка — executeUpdate на PreparedStatement возвращает количество измененных ros. Я не думаю, что есть хорошее решение вашей проблемы. Я использую отдельный метод для создания нового идентификатора, присваиваю ему значение domain и сохраняю его.
5. Звучит хорошо, но, дорогой, я не могу этого сделать, потому что я работаю над существующей системой и фреймворком, и я могу вносить такие изменения.
Ответ №1:
Прочитайте документацию MyBatis.
KeyProperty — это поле, в которое MyBatis установит ключ с помощью getGeneratedKeys или дочернего элемента selectKey инструкции insert .
Итак, дано Pojo с полем «id» с методами get и set. После выполнения инструкции insert с классом Mapper поле id в pojo будет задано с сгенерированным значением ключа.
Комментарии:
1. Чтобы показать явный пример: допустим, у вас есть
Student
pojo сid
атрибутом. Создайте свой новый student и вызовstudentMapper.addNewStudent(student);
Nowstudent.getId()
содержит номер auto, а не возвращаемое значение fromaddNewStudent()
— это всегда будет количество затронутых строк.
Ответ №2:
Спасибо всем за ваши ответы, но у меня есть решение, вот оно…..
@Insert("INSERT INTO USERS (NAME,AGE) VALUES(#{name},#{age})")
@SelectKey(statement="select STANDARDS_ID_SEQ.CURRVAL from dual", resultType = int.class, before = false, keyProperty = ID)
@Options(useGeneratedKeys=true, keyProperty="ID", keyColumn="ID")
теперь он вернет новый созданный идентификатор