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

Имею первичный ключ от Hibernate и при создании таблицы
идет перестановка последовательности полей
Как с эти бороться ?

Код: 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.
package TimeSheet;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.Embedded;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.AccessType;

@Embeddable
class PrimaryKey {
	@Column(name="DAY")
	@Temporal(TemporalType.TIMESTAMP)
	protected Date dDay;

	@Column(name="TAB", length=8)
	protected String sTab;
	
	@Column(name="KIND", length=5)
	public String sKind;
}

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

	@Id
	public Date dDay;

	@Id
	public String sTab;

	@Id
	public String sKind;

}



Код: java
1.
2.
3.
20:47:46,942 DEBUG SchemaExport:377 - drop table WORK cascade constraints
create table WORK (DAY timestamp not null, KIND varchar2(5 char) not null, TAB varchar2(8 char) not null, primary key (DAY, KIND, TAB))
20:47:46,958 DEBUG SchemaExport:377 - create table WORK (DAY timestamp not null, KIND varchar2(5 char) not null, TAB varchar2(8 char) not null, primary key (DAY, KIND, TAB))



Почему переставил последовотельность полей ?
primary key (DAY, KIND, TAB)
...
Рейтинг: 0 / 0
Hibernate -первичный ключ
    #38472092
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему из 3 способов выбрали такой меппинг?
Вот что про него написано в официальной документации:
As you can see the last case is far from obvious. It has been inherited from the dark ages of EJB 2 for backward compatibilities and we recommend you not to use it (for simplicity sake). Из темных времен!!!
(помогут ли 2 других способа решить проблему - не знаю)
...
Рейтинг: 0 / 0
Hibernate -первичный ключ
    #38472113
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot ivanra]
Почему из 3 способов выбрали такой меппинг?
[quot]

Показался более наглядным.....
Не думал что есть существенные отличия в формировании ключа
(но простые поля Hibernate - тоже зачем то переставляет ???)
...
Рейтинг: 0 / 0
Hibernate -первичный ключ
    #38472130
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraПочему из 3 способов выбрали такой меппинг?


Если использовать такой вариант все равно переставляет
Код: 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.
package TimeSheet;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.Embedded;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.AccessType;

@Embeddable
class PrimaryKey implements Serializable {
	@Column(name="DAY")
	@Temporal(TemporalType.TIMESTAMP)
	protected Date dDay;

	@Column(name="TAB", length=8)
	protected String sTab;
	
	@Column(name="KIND", length=5)
	public String sKind;

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

@Entity
@Table(name="WORK")
//@IdClass(PrimaryKey.class)
public class Work implements Serializable {

    @EmbeddedId
	public PrimaryKey Pk;
	
	public PrimaryKey getPk() {
		return Pk;
	}

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

	@Column(name="SUCCES")
	public int iSucces;

	@Column(name="WITHIN")
	public int iWithin;
	
	@Column(name="OUTSID")
	public int iOutsid;
	
	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.
21:43:44,949 DEBUG SchemaExport:377 - drop table WORK cascade constraints
create table WORK (DAY timestamp not null, KIND varchar2(5 char) not null, TAB varchar2(8 char) not null, OUTSID number(10,0), SUCCES number(10,0), WITHIN number(10,0), primary key (DAY, KIND, TAB))
21:43:44,980 DEBUG SchemaExport:377 - create table WORK (DAY timestamp not null, KIND varchar2(5 char) not null, TAB varchar2(8 char) not null, OUTSID number(10,0), SUCCES number(10,0), WITHIN number(10,0), primary key (DAY, KIND, TAB))



Какой надо использовать ?
чтобы видеть заданную последовательнсоть ?
...
Рейтинг: 0 / 0
Hibernate -первичный ключ
    #38472792
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В XML-меппинге порядок полей соблюдается.
С аннотациями - видимо, не существует способа прочитать их в упорядоченном виде из скомпилированного кода. Не зря же в JAXB существует отдельная аннотация для задания порядка следования элементов
...
Рейтинг: 0 / 0
Hibernate -первичный ключ
    #38473602
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanra,

Понятно
Т.е. аннотациями упорядочить невозможно ..., буду пробовать через XML

P.S. честно говоря не хотелось бы - применительно к нашей организации
такой способ АППОЛИТИЧЕН.

Может есть методы - господа знатоки подумайте - подскажите ...
...
Рейтинг: 0 / 0
Hibernate -первичный ключ
    #38473621
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

Тебя что смущает, порядок следования полей в таблице, или порядок следования полей в первичном ключе ?
...
Рейтинг: 0 / 0
Hibernate -первичный ключ
    #38473669
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Конечно в ключе
...
Рейтинг: 0 / 0
Hibernate -первичный ключ
    #38473670
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XMasterZiv,

Конечно в ключе

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

порядок следования полей можно изменить и четко выдерживать если в названии писать ЦИФИР
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
@Embeddable
class PrimaryKey implements Serializable {
	@Column(name="DAY")
	@Temporal(TemporalType.TIMESTAMP)
	protected Date s0Day;

	@Column(name="TAB", length=8)
	protected String s1Tab;

	@Column(name="KIND", length=5)
	protected String s2Kind;

    public PrimaryKey(Date dDay,String sTab,String sKind) {
    	this.s0Day  = dDay;
    	this.s1Tab  = sTab;
    	this.s2Kind = sKind;
    }
	
}



Однако совсем забавно - а отключить умную сортировку возможно ?
...
Рейтинг: 0 / 0
Hibernate -первичный ключ
    #38474450
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X а отключить умную сортировку возможно ?


Господа никто не сталкивался ? Не подскажите ?
...
Рейтинг: 0 / 0
Hibernate -первичный ключ
    #38474530
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XHOME_XMasterZiv,

Конечно в ключе

Да и желательно по всей таблице - там глазам и мозгам привычно и понятнее

Положение полей в таблице не имеет значения.

А вот положение в ключе -- имеет существенное значение иногда.

Могу предложить только сразу после создания таблицы пересоздать ключ руками с нужным порядком полей.
Вроде бы была возможность для Hib подключить какой-то скрипт после создания БД, там это можно сделать.
...
Рейтинг: 0 / 0
Hibernate -первичный ключ
    #38474629
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я бы в таком случае использовал суррогатный ключ, плюс уникальный индекс по указанным полям - в уникальном индексе порядок полей можно задать;
Либо вообще отключить hbm2ddl (или отставить validate), а генерацию - в отдельном скрипте / в другой библиотеке.

Конечно, работает xml-меппинг, но эта возможность (соблюдение порядка следования полей) по-моему, не документирована, а значит в будущем на нее полагаться нельзя
...
Рейтинг: 0 / 0
Hibernate -первичный ключ
    #38474861
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял - спасибо !
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate -первичный ключ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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