Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DAO Implementation 
:(
    Опции темы
greef
Дата 28.12.2007, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 10.10.2007

Репутация: нет
Всего: нет



Доброго времени суток.
Есть 2 таблицы в БД. Связь one-to-many. В обоих нужно редактировать, удалять добавлять данные.
Использую Spring и Hibernate.
Как правильно реализовать DAO класс для связанных сущностей?
Как я понимаю все методы должны быть в одном DAO-классе?

Желательно сылку на примеры, документацию и тд
Заранее спасибо.

PM MAIL   Вверх
Izabela
Дата 29.12.2007, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 13.2.2007
Где: Lviv

Репутация: нет
Всего: 3



Если используать  Hibernate анотации( а не мапинг) тогда
http://java.sun.com/javaee/5/docs/api/java.../OneToMany.html
и пример
Код
/*************************************************************************
 
@Entity
public class PageSettings extends BaseEntity
{
 
    @OneToMany
    @Cascade({ CascadeType.ALL })
    private Set<ContentValue> contentValues;
    
    @ManyToOne
    private PageCore selectedPageCore;
    
}



Добавлено через 4 минуты и 16 секунд
ну и конечно клас должен иметь get i set  метод
 и еще дока
--------------------
 
PM MAIL ICQ   Вверх
Platon
Дата 29.12.2007, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 10
Всего: 40



На самом деле, как я понял, и буду рад если меня поправят. DAO - это что-то типа такого:

Код

public interface Car {
    public Long getRecordId();
    public void setRecordId(Long recordId);
    
    public Model getModel();
    public void setModel(Model model);
}

public interface Model {
    public Long getRecordId();
    public void setRecordId(Long recordId);
    public String getName();
    public void setName(String name);
}

public CarManager {
    public Car getCar(Long id);
    public void removeCar(Long id);
    public void removeCar(Car car);
    public Model getModel(Long id);
    public void removeModel(Long id);
    public void removeModel(Model car);
}

//////////////////////////////////////////////////////////

public class MemoryCar implements Car {
    private Model model;

    public Long getRecordId() { return null; }
    public void setRecordId(Long recordId) {}
    
    public Model getModel() { return model; }
    public void setModel(Model model) {this.model = model;}
}

public class MemoryModel implements Model {
    private String name;

    public Long getRecordId() { return null; }
    public void setRecordId(Long recordId) {}
    
    public Name getName() { return name; }
    public void setName(String name) {this.name = name;}
}

public MemoryCarManager implements CarManager {

    private HashSet<Long, Car> cars = new HashSet<Long, Car>();
    private HashSet<Long, Model> models = new HashSet<Long, Model>();

    public Car getCar(Long id) {
        return cars.get(id);
    }
    public void removeCar(Long id) {
        cars.removeKey(id);
    }
    public void removeCar(Car car) {
        cars.remove(car);
    }
    public Model getModel(Long id) {
         return models.get(id);
    }
    public void removeModel(Long id) {
        models.removeKey(id);
    }
    public void removeModel(Model car) {
        models.remove(car);
    }
}

///////////////////////////////////////////////////////////////////////////
@Entity
public class JpaCar implements Car {
    @Id
    @GenerateValue
    private Long recordId;

   @ManyToOne
   private Model model;
    public JpaCar() {
        
    }
    public JpaCar(Long recordId) {
        setRecordId(recordId);
    }

    public Long getRecordId() { return recordId; }
    public void setRecordId(Long recordId) {this.recordId = recordId}
    
    public Model getModel() { return model; }
    public void setModel(Model model) {this.model = model;}
}

public class JpaModel implements Model {
    @Id
    @GenerateValue
    private Long recordId;

   private String name;

    public Long getRecordId() { return recordId; }
    public void setRecordId(Long recordId) {this.recordId = recordId}
    
    public String getName() { return name; }
    public void setName(String name) {this.name = name;}

}

public class JpaCarManager implements CarManager {

    private SessionFactory factory;

    public JpaCarManager(SessionFactory factory) {
        this.factory = factory;
    }

    public Car getCar(Long id) {
        return (Car)factory.createSession().get(JpaCar.class, id);
    }
    public void removeCar(Long id) {
        removeCar(new JpaCar(id));
    }
    public void removeCar(Car car) {
         Session s = factory.createSesson();
         s.startTransaction();
         s.delete(car);
         s.getTransaction().commit();
    }
    public Model getModel(Long id) {
         return (Model)factory.createSession().get(JpaModel.class, id);
    }
    public void removeModel(Long id);
    public void removeModel(Model model) {
         Session s = factory.createSesson();
         s.startTransaction();
         s.delete(model);
         s.getTransaction().commit();
    }
}

PM MAIL ICQ   Вверх
Tony
  Дата 29.12.2007, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: 6
Всего: 12



Dlja kazdoj tablici budet svoj DAO. A lutshe vsego ispolozvat' AOP+serveici(teze samie DAO)


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
Platon
Дата 29.12.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 10
Всего: 40



Цитата(Tony @  29.12.2007,  19:59 Найти цитируемый пост)
Dlja kazdoj tablici budet svoj DAO

По-моему, Это условие вовсе необзательно, главное чтобы затем можно было без лишних усилий реализовывать DAO интерфейс.
В моем случае, авто и ее модель можно объединить.
PM MAIL ICQ   Вверх
Tony
  Дата 29.12.2007, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: 6
Всего: 12



A esli u tebja 50 tablic ???. V odnom interfase budesh bombit' vsjo a potom implementaciju v odnom klasse delat'. It's sux man..... V tvojom primere eto pokatit. No nado kak pravelno. smile 
 


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
Platon
Дата 29.12.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 10
Всего: 40



Ткни меня в то место, где написано, что так правильно.
PM MAIL ICQ   Вверх
Tony
  Дата 29.12.2007, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: 6
Всего: 12



Esli u tebja est' dve tablici: customers i persons. budet dva interfejsa. Kone4no ti mozhesh sdelat'  2  implemntacii v odin klass. No za4em. A tak budem 2 klassa: PersonDAOImpl i CustomerDAOImpl. 


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
greef
Дата 30.12.2007, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 10.10.2007

Репутация: нет
Всего: нет



Пример можно увидеть? В случае использования 2 и более классов классов. Параллельно поискал в google, но пока ничего не нашел.
Просто таблицы связаны, вот и интересно как это связь реализуется в DAO классах.


PM MAIL   Вверх
Tony
Дата 30.12.2007, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: 6
Всего: 12



Цитата(Tony @ 29.12.2007,  22:22)
Esli u tebja est' dve tablici: customers i persons. budet dva interfejsa. Kone4no ti mozhesh sdelat'  2  implemntacii v odin klass. No za4em. A tak budem 2 klassa: PersonDAOImpl i CustomerDAOImpl.

Prosto u tebja v sping mappinge budet 2 DAO opisano. Vot i vsjo.


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
greef
Дата 9.1.2008, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 10.10.2007

Репутация: нет
Всего: нет



Допустим есть 2 таблицы - гостиницы (Hotels) и категории номеров (Category) и связь one-to-many. Те человек заходит на сайт - выбирает интересующий его отель - получает все категории для данного отеля. Администратор должен иметь возможность удалить, добавить и изменить как отели, так и категории этих отелей.

Будет 2 DAO класса 

1) HotelDAO.java с методами
Код

    public List getHotels();
    public Hotel getHotel(Long hotelId);
    public void saveHotel(Hotel hotel);
    public void removeHotel(Long hoteld);

+ метод для загрузки выбранного отеля + категории номеров для данного отеля (те мы передаем id отеля и в ответ получаем все котегории где id отеля = hotelId)
Код

    public Category getCategory(Long hotelId);


2) CategoryDAO.java - вот тут вопросы появляются. Метод public List getCategories() - не нужен, так как смысла в получения всех категорий нет. Значит останется только 3 метода?
Код

    public Hotel getCategory(Long сategoryId);
    public void saveCategory(Hotel сategory);
    public void removeCategory(Long сategoryId);

Правильно?
Вообщем я окончательно запутался с реализацией dao для множества связанных сущностей. smile  
Прошу помощи!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0875 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.