Моя проблема заключается в упорствовать два класса, которые имеют 1 а: п отношения:MyBatis: Как сопоставить «обратные» отношения?
public class DayRecord {
private Long id;
private List<TimeRecord> timeRecordsToday = new ArrayList<TimeRecord>(4);
...
}
public class TimeRecord {
private Long id;
...
}
Так, в коде, DayRecord знает TimeRecord.
create table DAY_RECORDS (
id int primary key,
);
create table TIME_RECORDS (
id int primary key,
day_record_id int not null,
foreign key (day_record_id) references DAY_RECORDS (id)
);
В базе данных TimeRecord знает DayRecord.
Могу ли я сохранить DayRecord со всеми его TimeRecords за один шаг?
В Hibernate я могу установить обратное отображение и просто сохранить DayRecord, и все его TimeRecords также будут сохранены. С MyBatis, я пытался спасти классы независимо друг от друга:
<mapper
namespace="de.stevenschwenke.java.javafx.xyz.DayRecordMapper">
<insert id="insertDayRecord"
parameterType="de.stevenschwenke.java.javafx.xyz.DayRecord">
insert into DAY_RECORDS (id) values (NEXT VALUE FOR DAY_RECORDS_SEQ);
</insert>
</mapper>
<mapper
namespace="de.stevenschwenke.java.javafx.xyz.TimeRecordMapper">
<insert id="insertTimeRecord"
parameterType="de.stevenschwenke.java.javafx.xyz.TimeRecord">
insert into TIME_RECORDS (id) values (NEXT VALUE FOR TIME_RECORDS_SEQ);
</insert>
</mapper>
Но как я могу сохранить DayRecord-ID inTimeRecord?
Идеи:
- Дают TimeRecord атрибут dayRecordId. Таким образом, будет создана циклическая зависимость. Однако при сохранении картирование будет заботиться о сохранности.
- В одной транзакции сначала сохраните DayRecord, получите свой идентификатор, установите его в TimeRecords и сохраните этот объект.
- использовать вложенную Select-заявление внутри вставки, как в документации
Что такое лучший способ сохранить оба объекта? Спасибо за вашу помощь!
Спасибо за ваш быстрый ответ! Спасение DayRecord было первой идеей № 2. Однако при этом мне пришлось бы добавить dayRecordId в TimeRecord, верно? Этого я и хочу избежать. Навигация должен идти только от DayRecord до TimeRecord. – Steven