Есть ли такие фреймворки типа iBatis, но чтобы они сопоставляли не cтолько простые типы данных, но связи много-ко-многим, типа такого:
===== SQL part =====
create table Persons(id integer primary key, Name String unique not null);
create table UserAccounts(id integer primary key, Login String unique not null, Password not null) foreign key (id) references Persons(Id);
create table Tags(Id integer primary key, Content String);
create table Articles(Id integer primary key, Subject String, Body Text, Author integer) foreign key (Author) references Persons(id);
create table ArticleTags(Article_ID integer not null, Tag_ID integer not null) foreign key (Article_ID) references Articles(Id), foreign key (Tag_ID) references Tags(Id), unique (Article_ID,Tag_ID);
===== Code part =====
class Person {
Id integer;
Name String;
};
class UserAccount : Person {
Login String;
Password String;
};
class Article {
Id long;
String subject;
String text;
Person author;
Vector<Tag> tags;
}
Tag t1 = new Tag(1,«Test»);
Tag t2 = new Tag(2,«Hello Wordl»);
Person ipetrov = new UserAccount(3,«Ivan Petrov»,«loginname»,«password»);
Article a = new Article();
a.Id = 4;
a.Subject = «Test article»;
a.text = «Lorem ipsum.\nTest article.\nHello!»;
a.Author = ipetrov;
a.tags.Add(t1);
a.tags.Add(t2);
и потом вызовом Persistence.save(obj) это все автоматически распихивается в таблицы:
=== SQL operators ===
insert into Persons(ID,Name) values (3,'Ivan Petrov');
insert into Accounts(ID,Login,Password) values (3,'loginname",«password»);
insert into Tags(Id,Content) values (1,'Test');
insert into Tags(Id,Content) values (2,'Hello World')
insert into Articles(ID,Subject,Body,Author) values (4,'Subject','...',3);
insert into ArticleTags(Article_ID, Tag_Id) values (4,1);
insert into ArticleTags(Article_ID, Tag_Id) values (4,2);
и поддерживали полиморфность при чтении, то есть при восстановлении из базы:
Article a = (Article) Persistence.load(4);
System.out.println(a.Autor.getClass().FullName)
на выходе должно быть напечатано UserAccount а не Person(!), и писать всякие { foreach (Article.Tags) do { insertIntoArticleTags(Article.ID,Tags[index].Id); } } не приходилось бы ни для чтения, ни для сохранения.
Ответ на:
комментарий
от tia
Ответ на:
комментарий
от tia
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум sqlite избежать автоинкремента primary key (2017)
- Форум [mysql] Чудо (2010)
- Форум [sqlite3] Отношение один ко многим и INSERT. (2009)
- Форум Как связать два класса с полями типа Map<String, String> отношением @OneToMany ? (2019)
- Форум почему с QSqlRelationalTableModel данные не сохраняются? (2015)
- Форум [MySQL] кодировка передаваемых в процедуру параметров. (2011)
- Форум C/SQLite что за ошибка (2015)
- Форум Убрать задвоение в выборке (2018)
- Форум 1:n relationship (2018)
- Форум Правильный запрос (2018)