Mon problème est de persister deux classes qui ont une 1: relation n:MyBatis: Comment mapper une relation "inverse"?
public class DayRecord {
private Long id;
private List<TimeRecord> timeRecordsToday = new ArrayList<TimeRecord>(4);
...
}
public class TimeRecord {
private Long id;
...
}
Ainsi, dans le code, DayRecord SAIT 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)
);
Dans la base de données, TimeRecord connaît DayRecord. Puis-je sauvegarder un DayRecord avec tous ses TimeRecords en une seule fois? En mode Hibernate, je peux définir un mappage inverse et enregistrer simplement un enregistrement de jour et tous ses enregistrements TimeRecord seront également enregistrés. Avec mybatis, j'ai essayé de sauver les classes indépendamment les uns des autres:
<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>
Mais comment puis-je enregistrer le DayRecord-ID inTimeRecord?
Idées:
- TimeRecord un attribut Donne dayRecordId. De cette façon, une dépendance cyclique serait créée. Cependant, la cartographie prendrait soin de la dpenedency tout en économisant.
- Dans une transaction, enregistrez d'abord le DayRecord, obtenez son ID, le définissez dans TimeRecords et enregistrez cet objet.
- utiliser un instruction_select imbriqué dans insertion comme dans la documentation
Quelle est la meilleure façon de sauver les deux objets? Merci de votre aide!
Merci pour votre réponse rapide! Sauvegarder DayRecord d'abord était mon idée # 2. Cependant, en faisant cela, je devrais ajouter un dayRecordId à TimeRecord, non? C'est ce que je veux éviter. La navigation devrait seulement aller de DayRecord à TimeRecord. – Steven