Есть ли такие фреймворки типа 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)
 - Форум Как связать два класса с полями типа Map<String, String> отношением @OneToMany ? (2019)
 - Форум 1:n relationship (2018)
 - Форум [sqlite3] Отношение один ко многим и INSERT. (2009)
 
- Форум почему с QSqlRelationalTableModel данные не сохраняются? (2015)
 - Форум C/SQLite что за ошибка (2015)
 - Форум Обьясните почему не работает constraint (2012)
 - Форум [MySQL] кодировка передаваемых в процедуру параметров. (2011)
 - Форум Правильный запрос (2018)