Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вспомогательные таблицы и Hibernate / 5 сообщений из 5, страница 1 из 1
28.07.2012, 12:35:34
    #37896348
2dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вспомогательные таблицы и Hibernate
Имеется база на PostgreSQL
Вопрос встал над оформлением связей из вспомогательной таблицы

Есть таблицы:
Код: plsql
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.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
CREATE TABLE orders
(
  uid bigint NOT NULL DEFAULT nextval('"U_ORD"'::regclass),
  ord_num character varying(255) NOT NULL,
  ord_state character varying(25) NOT NULL,
  ord_datereg timestamp without time zone NOT NULL,
  ord_begindate timestamp without time zone NOT NULL,
  ord_dateofperf timestamp without time zone NOT NULL,
  ord_file_uid bigint,
  ord_name character varying(1000) NOT NULL,
  ord_summary character varying(1000),
  ord_publisher bigint,
  doc_type t_document_type DEFAULT 'приказ'::t_document_type,
  doc_state bigint NOT NULL DEFAULT 1,
  CONSTRAINT orders_pkey PRIMARY KEY (uid ),
  CONSTRAINT fk_file_uid2usr FOREIGN KEY (ord_file_uid)
      REFERENCES file_storage (uid) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT fk_publisher2usr FOREIGN KEY (ord_publisher)
      REFERENCES usr (uid) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT orders_doc_state_fkey FOREIGN KEY (doc_state)
      REFERENCES orders_state (uid) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT orders_ord_file_uid_key UNIQUE (ord_file_uid ),
  CONSTRAINT ord_state_chk CHECK (ord_state::text = 'Создан'::text OR ord_state::text = 'Отправлен на подпись'::text OR ord_state::text = 'Подписан'::text OR ord_state::text = 'Отменен'::text OR ord_state::text = 'Выполнен'::text OR ord_state::text = 'Переиздан'::text)
)

CREATE TABLE usr
(
  uid bigint NOT NULL DEFAULT nextval('"U_USR_ID"'::regclass),
  usr_shortname character varying(60) NOT NULL,
  usr_state t_usr_state2,
  birthdate timestamp without time zone NOT NULL,
  accepted2work timestamp without time zone NOT NULL,
  redundant_work timestamp without time zone NOT NULL,
  create_date timestamp without time zone,
  update_date timestamp without time zone,
  block_date timestamp without time zone,
  delete_date timestamp without time zone,
  pwd character varying(254) NOT NULL,
  usr_surname character varying(60) NOT NULL,
  usr_name character varying(40) NOT NULL,
  usr_lastname character varying(60) NOT NULL,
  office_uid bigint NOT NULL,
  departament_uid bigint NOT NULL,
  appointment_category_uid bigint NOT NULL,
  appointment_uid bigint NOT NULL,
  phonenum character varying(40),
  usr_id bigint,
  change_of_name_uid bigint,
  CONSTRAINT usr_pkey PRIMARY KEY (uid ),
  CONSTRAINT fk_lgn_acc2appointment FOREIGN KEY (appointment_uid)
      REFERENCES appointment (uid) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT fk_lgn_acc2appointment_category FOREIGN KEY (appointment_category_uid)
      REFERENCES appointment_category (uid) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT fk_lgn_acc2departament FOREIGN KEY (departament_uid)
      REFERENCES departament (uid) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT fk_lgn_acc2office FOREIGN KEY (office_uid)
      REFERENCES office (uid) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT usr_change_of_name_uid_fkey FOREIGN KEY (change_of_name_uid)
      REFERENCES usr (uid) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT usr_usr_shortname_key UNIQUE (usr_shortname )
)

CREATE TABLE ord2concordance
(
  uid bigint NOT NULL DEFAULT nextval('"U_ORD2CONCORDANCE"'::regclass),
  ord_uid bigint NOT NULL,
  usr_uid bigint NOT NULL,
  doc_state bigint NOT NULL DEFAULT 1,
  CONSTRAINT ord2concordance_pkey PRIMARY KEY (uid ),
  CONSTRAINT fk_ord2concordance2ord FOREIGN KEY (ord_uid)
      REFERENCES orders (uid) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT fk_ord2concordance2usr FOREIGN KEY (usr_uid)
      REFERENCES usr (uid) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT ord2concordance_doc_state_fkey FOREIGN KEY (doc_state)
      REFERENCES orders_state (uid) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)



Таблица ord2concordance служит вспомогательной, которая содержит в себе связь определенных Order с определенными User

Как грамотно замаппить это все на модель ?

Пока набросал такую:

Код: 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.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
@Entity
@Table(name="orders",schema="hd_shm")
public class Order {

    @Id
    @SequenceGenerator(sequenceName="U_ORD", name = "U_ORD")
    @Column(name="uid",nullable=false)
    private long uid;

    @Column(name="ord_num",length=255,nullable=false,unique=false)
    private String num;

    @Column(name="ord_state",length=25,nullable=false,unique=false)
    private String state;

    @Column(name="ord_datereg",nullable=false,unique=false)
    private Date dateReg;

    @Column(name="ord_begindate",nullable=false,unique=false)
    private Date beginDate;

    @Column(name="ord_dateofperf",nullable=false,unique=false)
    private Date dateOfPerf;

    @Column(name="ord_file_uid",nullable=true,unique=false)
    private long fileUid;

    @Column(name="ord_name",length=1000,nullable=false,unique=false)
    private String name;

    @Column(name="ord_summary",length=1000,nullable=true,unique=false)
    private String summary;

    @ManyToOne
    @JoinColumn(name = "ord_publisher")
    private User publisher;

    @Column(name="doc_type",nullable=false,unique=false)
    private String docType;

    @Column(name="doc_state",nullable=false,unique=false)
    private String docState;

    private Set<User> Concordance;

    private Set<User> Executor;

    private Set<User> Responsible;

    public long getUid() {
        return uid;
    }

    public void setUid(long uid) {
        this.uid = uid;
    }

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public Date getDateReg() {
        return dateReg;
    }

    public void setDateReg(Date dateReg) {
        this.dateReg = dateReg;
    }

    public Date getBeginDate() {
        return beginDate;
    }

    public void setBeginDate(Date beginDate) {
        this.beginDate = beginDate;
    }

    public Date getDateOfPerf() {
        return dateOfPerf;
    }

    public void setDateOfPerf(Date dateOfPerf) {
        this.dateOfPerf = dateOfPerf;
    }

    public long getFileUid() {
        return fileUid;
    }

    public void setFileUid(long fileUid) {
        this.fileUid = fileUid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSummary() {
        return summary;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }

    public User getPublisher() {
        return publisher;
    }

    public void setPublisher(User publisher) {
        this.publisher = publisher;
    }

    public String getDocType() {
        return docType;
    }

    public void setDocType(String docType) {
        this.docType = docType;
    }

    public String getDocState() {
        return docState;
    }

    public void setDocState(String docState) {
        this.docState = docState;
    }
}



Не могу понять какие аннотации указать для private Set<User> Concordance

В идеале там должно выполняться что-то похожее на этот селект:

Код: plsql
1.
2.
3.
select u.* from usr u
inner join ord2concordance o2c on o2c.usr_uid = u.uid
where o2c.ord_uid = {идентификатор текущего Orders}
...
Рейтинг: 0 / 0
28.07.2012, 21:17:52
    #37896536
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вспомогательные таблицы и Hibernate
2devВ идеале там должно выполняться что-то похожее на этот селект:
в идеале:
- убрать все лишние поля не имеющие значения к вопросу
- определить до маппинга 3 вида отношений - 1кМ, МкМ, Мк1
- промаппить в соответствии с этими отношениями
- всё
Будет работать
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
31.07.2012, 12:22:42
    #37898872
2dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вспомогательные таблицы и Hibernate
Petro123,

Убираем лишние поля

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE orders (
 uid bigint NOT NULL DEFAULT nextval('"U_ORD"'::regclass)
)

CREATE TABLE usr (
uid bigint NOT NULL DEFAULT nextval('"U_USR_ID"'::regclass)
)

CREATE TABLE ord2concordance
(
  uid bigint NOT NULL DEFAULT nextval('"U_ORD2CONCORDANCE"'::regclass),
  ord_uid bigint NOT NULL,
  usr_uid bigint NOT NULL
)




Таким образом один orders может иметь несколько usr через вспомогательную таблицу ord2concordance

Т.е. если мы выполним запрос вида
Код: plsql
1.
select uid,ord_uid,usr_uid from ord2concordance where ord_uid = 137



Получим:


Как замаппить такую связь ?
...
Рейтинг: 0 / 0
31.07.2012, 12:46:42
    #37898907
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вспомогательные таблицы и Hibernate
2dev, тут хоть и с жутким акцентом, зато по делу
http://www.youtube.com/watch?v=jAi8bY-H_ek&list=PL4AFF701184976B25&index=17&feature=plpp_video
...
Рейтинг: 0 / 0
31.07.2012, 13:49:43
    #37899047
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вспомогательные таблицы и Hibernate
мне вот интересно, вы реально главу 1.2.5. Bi-directional associations в официальной доке не осилили, или слишком круты, чтобы читать мануал?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вспомогательные таблицы и Hibernate / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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