powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Давайте поможем мне с аннотациями JPA.
6 сообщений из 6, страница 1 из 1
Давайте поможем мне с аннотациями JPA.
    #38459724
eldarkaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть структура. Хочу связать три сущности, чтобы в Company был список Departments, в каждом Department есть список Workers.
Никак не получается завязать их.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
   +Company
    -int companyId
    -String companyName
    -Set<Department> listOfDepartments = new HashSet<Department>();

    +Department
    -int departmentId
    -String departmentName
    -Set<Worker> listOfWorkers = new HashSet<Worker>();

    +Worker
    -int workerId
    -String workerName



Company
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
@Entity
@Table(name="Company")
public class Company {

    @Id @GeneratedValue(strategy = GenerationType.AUTO)
    private int idCompany;
    private String companyName;

    @OneToMany(mappedBy = "company")
    private Set<Department> listOfDepartments = new HashSet<Department>();

    public Set<Department> getListOfDepartments() {
        return listOfDepartments;
    }

    public void setListOfDepartments(Set<Department> listOfDepartments) {
        this.listOfDepartments = listOfDepartments;
    }

    public Company(){}

    public Company(int idCompany, String companyName){
        this.idCompany = idCompany;
        this.companyName = companyName;
    }

    public int getIdCompany() {
        return idCompany;
    }

    public void setIdCompany(int idCompany) {
        this.idCompany = idCompany;
    }

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

}


Department
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
package ru.eldarkaa.dto;

import javax.persistence.*;
import javax.xml.bind.annotation.*;
import java.util.*;

@Entity
public class Department {

    @Id @GeneratedValue(strategy = GenerationType.AUTO)
    private int idDepartment;
    private String departmentName;

    @ManyToOne
    @JoinColumn(name="idCompany")
    private Company company;

    @OneToMany(mappedBy = "department")
    private Set<Worker> listOfWorkers = new HashSet<Worker>();

    public Company getCompany() {
        return company;
    }

    public void setCompany(Company company) {
        this.company = company;
    }

    public Set<Worker> getListOfWorkers() {
        return listOfWorkers;
    }

    public void setListOfWorkers(Set<Worker> listOfWorkers) {
        this.listOfWorkers = listOfWorkers;
    }

    public Department(int idDepartment, String departmentName){
        this.idDepartment = idDepartment;
        this.departmentName = departmentName;
    }

    public int getIdDepartment() {
        return idDepartment;
    }

    public void setIdDepartment(int idDepartment) {
        this.idDepartment = idDepartment;
    }

    public String getDepartmentName() {
        return departmentName;
    }

    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }

}


Worker
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
@Entity
public class Worker {

    @Id @GeneratedValue(strategy = GenerationType.AUTO)
    private int idWorker;
    private String workerName;

    @ManyToOne
    @JoinColumn(name="idDepartment")
    private Department department;

    public Worker(int idWorker, String workerName){
        this.idWorker = idWorker;
        this.workerName = workerName;
    }

    public int getIdWorker() {
        return idWorker;
    }

    public void setIdWorker(int idWorker) {
        this.idWorker = idWorker;
    }

    public String getWorkerName() {
        return workerName;
    }

    public void setWorkerName(String workerName) {
        this.workerName = workerName;
    }
}


Выполняю так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Session session = sessionFactory.openSession();
        session.beginTransaction();
        Worker worker1 = new Worker("WorkerName1");
        Worker worker2 = new Worker("WorkerName2");
        Worker worker3 = new Worker("WorkerName3");
        Worker worker4 = new Worker("WorkerName4");
        Department department = new Department("Technical");
        department.getListOfWorkers().add(worker1);
        department.getListOfWorkers().add(worker2);
        department.getListOfWorkers().add(worker3);
        department.getListOfWorkers().add(worker4);
        company = new Company("MyCompanyName");
        company.getListOfDepartments().add(department);
        session.save(company);
        session.getTransaction().commit();
        session.close();


В итоге таблицы worker и department пустые. В company только имя и айди.
LOG
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Hibernate: alter table Department drop foreign key FK_l7sg67atqhnn0soqynpvxrtpk
Hibernate: alter table Worker drop foreign key FK_s53hyohtyjy93srd2wkksairk
Hibernate: drop table if exists Company
Hibernate: drop table if exists Department
Hibernate: drop table if exists Worker
Hibernate: create table Company (idCompany integer not null auto_increment, companyName varchar(255), primary key (idCompany))
Hibernate: create table Department (idDepartment integer not null auto_increment, departmentName varchar(255), idCompany integer, primary key (idDepartment))
Hibernate: create table Worker (idWorker integer not null auto_increment, workerName varchar(255), idDepartment integer, primary key (idWorker))
Hibernate: alter table Department add index FK_l7sg67atqhnn0soqynpvxrtpk (idCompany), add constraint FK_l7sg67atqhnn0soqynpvxrtpk foreign key (idCompany) references Company (idCompany)
Hibernate: alter table Worker add index FK_s53hyohtyjy93srd2wkksairk (idDepartment), add constraint FK_s53hyohtyjy93srd2wkksairk foreign key (idDepartment) references Department (idDepartment)
ноя 11, 2013 3:10:31 AM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000230: Schema export complete
Hibernate: insert into Company (companyName) values (?)

...
Рейтинг: 0 / 0
Давайте поможем мне с аннотациями JPA.
    #38459726
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eldarkaa,
вот,www.youtube.com/watch?v=Yv2xctJxE-w&list=PL4AFF701184976B25, за день можно разобраться
...
Рейтинг: 0 / 0
Давайте поможем мне с аннотациями JPA.
    #38459734
eldarkaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
там для двух сущностей, либо 3-ех но про наследование.
Я смотрел все серии и мне это не помогло, если бы помогло, то уж точно бы не писал сюда.
...
Рейтинг: 0 / 0
Давайте поможем мне с аннотациями JPA.
    #38459739
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eldarkaa,

Bidirectional relationships between managed entities will be persisted based on references held by the owning side of the relationship. It is the developer’s responsibility to keep the in-memory references held on the owning side and those held on the inverse side consistent with each other when they change. In the case of unidirectional one-to-one and one-to-many relationships, it is the developer’s responsibility to insure that the semantics of the relationships are adhered to.

Следовательно будет работать такой код

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Session session = sessionFactory.openSession();
        session.beginTransaction();
        Worker worker1 = new Worker("WorkerName1");
        Worker worker2 = new Worker("WorkerName2");
        Worker worker3 = new Worker("WorkerName3");
        Worker worker4 = new Worker("WorkerName4");
        Department department = new Department("Technical");
        department.getListOfWorkers().add(worker1);
worker1.setDepartment(department );
        department.getListOfWorkers().add(worker2);
worker2.setDepartment(department );
        department.getListOfWorkers().add(worker3);
worker3.setDepartment(department );
        department.getListOfWorkers().add(worker4);
worker4.setDepartment(department );
        company = new Company("MyCompanyName");
        company.getListOfDepartments().add(department);
department.setCompany(company )
        session.save(company);
        session.getTransaction().commit();
        session.close();



Ну и логичным продолжением будем такая стратегия - в сущностях, которые со стороны One заводить методы addEntity(Entity e) где Entity - это сущность со стороны Many.

Например

Company.java

public void addDepartment(Department d){
this.getDepartments().add(d);
d.setCompany(this);
}

и в бизнес коде уже использовать этот addDepartment();
...
Рейтинг: 0 / 0
Давайте поможем мне с аннотациями JPA.
    #38459747
eldarkaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник ,
Вы все правильно сказали. Спасибо, ваше замечание очень важно.
(если бы не мое желание разбираться в каждом темном месте кода в 3 часа ночи, то в 3-22 ваше сообщение мне бы помогло)
Еще один нюанс остался упущенным:
Код: java
1.
session.save(company);


Недостаточно. Так же надо сохранить все другие объекты ( worker'ов и department'ы )
Вопрос закрыт.
...
Рейтинг: 0 / 0
Давайте поможем мне с аннотациями JPA.
    #38460051
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spring Roo
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Давайте поможем мне с аннотациями JPA.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]