powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / OneToOne - один из елементов ключа константа
10 сообщений из 10, страница 1 из 1
OneToOne - один из елементов ключа константа
    #38475588
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня господа !

Необходимо связать два класса один к одному
Первичные ключи родителя DAY+TAB+KIND
Первичные ключи дочери KIND+TAB (при связи по полю TAB необходимо приравнять к "00000000")
@OneToOne(cascade = CascadeType.ALL)
@JoinColumns({@JoinColumn(name="KIND"),
@JoinColumn(name="TAB" ) - взять все записи у которых значение = "00000000" })

Как это реализовать ?
Заранее благодарен !

т.е. запросов это выглядит
Код: plsql
1.
2.
3.
4.
select A.*
         B.*
   from T1 A
     left join T2 B on (B.F1=A.F1 and B.F1='00000000')



Код: 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.
import java.io.Serializable;
import java.util.Date;

import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.JoinTable;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

@Entity
@Table(name="WORK")
public class Work implements Serializable {

	@Embeddable
	class PrimaryKey implements Serializable {
		
		private Date   dDay;
		private String nTab;
		private String sKind;

		public PrimaryKey(Date dDay,String nTab,String sKind) {
	    	this.dDay  = dDay;
	    	this.nTab  = nTab;
	    	this.sKind = sKind;
	    }
		
	}

	@EmbeddedId
	@AttributeOverrides({@AttributeOverride(name="dDay" ,column=@Column(name="DAY"          )),
    		             @AttributeOverride(name="nTab" ,column=@Column(name="TAB" ,length=8)),
    		             @AttributeOverride(name="sKind",column=@Column(name="KIND",length=5))
    					})
	private PrimaryKey Pk;
	
	@OneToOne(cascade = CascadeType.ALL)  
	@JoinColumns({@JoinColumn(name="KIND"),
                  @JoinColumn(name="TAB")
	             })
	private Kind kKind;
	
	@Column(name="SUCCES")
	private int iSucces;

	@Column(name="WITHIN")
	private int iWithin;

	@Column(name="OUTSID")
	private int iOutsid;
	
	public PrimaryKey getPk() {
		return Pk;
	}

	public void setPk(PrimaryKey pk) {
		Pk = pk;
	}

	public void setPk(Date dDay,String nTab,String sKind) {
		Pk = new PrimaryKey(dDay,nTab,sKind);
	}

	public Kind getkKind() {
		return kKind;
	}

	public void setkKind(Kind kKind) {
		this.kKind = kKind;
	}

	public int getiSucces() {
		return iSucces;
	}

	public void setiSucces(int iSucces) {
		this.iSucces = iSucces;
	}

	public int getiWithin() {
		return iWithin;
	}

	public void setiWithin(int iWithin) {
		this.iWithin = iWithin;
	}

	public int getiOutsid() {
		return iOutsid;
	}

	public void setiOutsid(int iOutsid) {
		this.iOutsid = iOutsid;
	}

}



Дочь
Код: 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.
import java.io.Serializable;
import java.util.Date;

import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

@Entity
@Table(name="KIND")
public class Kind implements Serializable {

	@Embeddable
	class PrimaryKey implements Serializable {
		
		private String sKind;
		private String sTab;

	    public PrimaryKey(Date dDay,String sKind,String sTab) {
	    	this.sKind = sKind;
	    	this.sTab  = sTab;
	    }
		
	}
	
	@EmbeddedId
	@AttributeOverrides({@AttributeOverride(name="sKind",column=@Column(name="KIND",length=5)),
    		             @AttributeOverride(name="sTab" ,column=@Column(name="TAB" ,length=8))
                        })
	private PrimaryKey Pk;


	@OneToOne(mappedBy="kKind")  
	private Work wWork; 
	
	public Work getwWork() {
		return wWork;
	}

	public void setwWork(Work wWork) {
		this.wWork = wWork;
	}


	@Column(name="NAIM",length=150)
	private String Naim;

	@Column(name="TYPE",length=10)
	private String Type;

	@Column(name="TIME")
	private int    Time;
		
	public PrimaryKey getPk() {
		return Pk;
	}

	public void setPk(PrimaryKey pk) {
		Pk = pk;
	}

	public void setPk(String sKind,String sTab) {
		Pk = new PrimaryKey(sKind,sTab);
	}

	public String getNaim() {
		return Naim;
	}

	public void setNaim(String naim) {
		Naim = naim;
	}

	public String getType() {
		return Type;
	}

	public void setType(String type) {
		Type = type;
	}

	public int getTime() {
		return Time;
	}

	public void setTime(int time) {
		Time = time;
	}

}
...
Рейтинг: 0 / 0
OneToOne - один из елементов ключа константа
    #38475743
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

???
...
Рейтинг: 0 / 0
OneToOne - один из елементов ключа константа
    #38475763
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,
а без этого гемороя в виде составных ключей нельзя? Ведь в реальных БД нет (мало) таких извратов ((B.F1=A.F1 and B.F1='00000000').
...
Рейтинг: 0 / 0
OneToOne - один из елементов ключа константа
    #38475774
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Подскажите пожалуйста почему не создается foreign key

Если так - фиктивное поле TAB0
@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumns({@JoinColumn(name=" TAB0 ",insertable=false,updatable=false,referencedColumnName="TAB" ),
@JoinColumn(name="KIND",insertable=false,updatable=false,referencedColumnName="KIND")
})

Код: java
1.
2.
3.
Создаеться доп. поле и создаеться ограничение 
15:09:22,118 DEBUG SchemaExport:377 - create table WORK (DAY timestamp not null, TAB varchar2(8 char) not null, KIND varchar2(5 char) not null, OUTSID number(10,0), SUCCES number(10,0), WITHIN number(10,0), TAB0 varchar2(8 char), primary key (DAY, TAB, KIND))
alter table WORK add constraint FK28BF118B11C7F foreign key (KIND, TAB0) references KIND



А если так - реальное поле
@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumns({@JoinColumn(name=" TAB ",insertable=false,updatable=false,referencedColumnName="TAB" ),
@JoinColumn(name="KIND",insertable=false,updatable=false,referencedColumnName="KIND")
})

Код: java
1.
2.
15:15:21,479 DEBUG SchemaExport:377 - create table WORK (DAY timestamp not null, TAB varchar2(8 char) not null, KIND varchar2(5 char) not null, OUTSID number(10,0), SUCCES number(10,0), WITHIN number(10,0), primary key (DAY, TAB, KIND))
15:15:21,501  INFO SchemaExport:268 - schema export complete
...
Рейтинг: 0 / 0
OneToOne - один из елементов ключа константа
    #38475781
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123HOME_X,
таких извратов ((B.F1=A.F1 and B.F1='00000000').


Насчет извратов наверное согласен .....
Тут вложена следующая сущность
Есть справочник продуктов
F1 F2 F3
1 00 Болт
2 00 Гайка
N 00 Шайба

И таких наименований N (поле F1), у каждого пользователя (поле F2) может быть не более 10-20 штук
он настаивает справочник под себя (т.е. в данном справочнике находятся ПРОФИЛЬ пользователя)
F1 F2 F3
1 00 Болт
2 00 Гайка
N 00 Шайба
- - - - - - - - - -
1 01 Болт
2 01 Гайка
- - - - - - - - - -
2 02 Гайка
N 02 Шайба

Держать отдельно в отдельной таблице не есть резонно, обрабатывать все равно в совокупности.
Как организовать пока не знаю ... подумаю (отсюда условие B.F1=A.F1 and B.F1='00000000')
...
Рейтинг: 0 / 0
OneToOne - один из елементов ключа константа
    #38475792
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,
нельзя БЛ пихать в ключи таблицы
Вариант:
- Сущность СправочникТоваров
- Сущность СправочникПользователи
- Сущность ПрофильПользователя - 3-тья таблица
...
Рейтинг: 0 / 0
OneToOne - один из елементов ключа константа
    #38475795
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XPetro123,
Подскажите пожалуйста почему не создается foreign key
...
Рейтинг: 0 / 0
OneToOne - один из елементов ключа константа
    #38475797
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123HOME_X,
нельзя БЛ пихать в ключи таблицы


Я подумаю над данным вопросом.
...
Рейтинг: 0 / 0
OneToOne - один из елементов ключа константа
    #38475801
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XHOME_XPetro123,
Подскажите пожалуйста почему не создается foreign key


Мне не понятно почему Hibernate не генерит команду
alter table WORK add constraint FK1000000 foreign key (KIND, TAB) references KIND

Если запустить в базе Oracle - все прекрасно обрабатывается
...
Рейтинг: 0 / 0
OneToOne - один из елементов ключа константа
    #38476058
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

Такое впечатление что hiber - не видет полей которые описаны в
первичном ключе , такое может быть ?
И рассматривает команды обособленно
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / OneToOne - один из елементов ключа константа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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