hibernate: список поиска дочерних идентификаторов для родителя - PullRequest
0 голосов
/ 15 декабря 2010

Технология: Hibernate 3.0

Предположим, у меня есть класс Entity

    @Entity
    @Table(name="tbl_companies")  
    public class Company
    {
            @Id
            @Column(name="id") 
            @GeneratedValue(strategy=GenerationType.IDENTITY)
            int id;

            @Column(name="name")
            String companyName;

            @OneToMany(mappedBy = "company")
            List<Employees> empList;

            @OneToMany(mappedBy = "company")
            List<Projects>  projectList;

            @OneToMany(mappedBy = "company")
            List<Department> deptList;

            @OneToMany(mappedBy = "company")
            List<Branch>     branchList;       
    }

В Entity Company, которая отображается в базу данных посредством аннотации hibernate, содержится список других связанных с ней объектов.Поскольку объекты этих сущностей, таких как Branch, Project, Employee, сами по себе являются тяжелыми объектами, это сделает объект Company очень тяжелым и содержит почти все данные в БД.Один из способов избежать этого - использовать ленивую загрузку.Другим подходом может быть использование List branchIdList, List projectIdList, который представляет собой список идентификаторов для объектов.Мой вопрос, какой подход является стандартной практикой и лучше использовать в такой ситуации.Лучше использовать такие факторы, как производительность в терминах памяти в основном, гибкость для программиста (первый - гибкий для программиста, а второй - меньше памяти).Другой вопрос, если я использую второй подход, что будет меняться в аннотации.Я сомневаюсь, что Hibernate поддерживает список идентификаторов или поддерживает только полноценные объекты.

Спасибо

Ответы [ 2 ]

2 голосов
/ 15 декабря 2010

Другим подходом может быть использование List branchIdList, List projectIdList, который представляет собой список идентификаторов для объектов.

Пожалуйста, очень тщательно подумайте, прежде чем делать это.Смысл использования ORM состоит в том, что строки в БД, которые связаны друг с другом посредством внешних ключей, могут быть представлены как объекты, связанные с помощью обычных ссылок и коллекций Java.Используя схему, которую вы обрисовали в общих чертах, вы потеряете большинство преимуществ использования Hibernate.

Рекомендуется использовать ленивую загрузку.

Лучше использовать такие факторы, как производительность вв основном термин «память», гибкость для программиста (первый - гибкость для программиста, а второй - меньше памяти).

ИМХО, память, которую вы получаете, если таковая имеется, не стоит программисту больновызывает.

1 голос
/ 15 декабря 2010

Я думаю, вы должны сначала просмотреть ваши сценарии использования для извлечения объекта Company.Означает, например, что существует слишком много сценариев, когда сотрудники извлекаются с объектом Company.Существует меньше сценариев, когда проекты извлекаются с помощью объекта Company.Итак, следуя этим инструкциям, вы можете удалить список проектов из объекта Company и сделать его многозначным из объекта Project (получить его вручную).Итак, проанализируйте все свои сценарии и сделайте несколько отношений один-на-один.Сделать другой список ленивым.

...