Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate связи между таблицами / 5 сообщений из 5, страница 1 из 1
22.04.2015, 22:52
    #38943070
goldenhawk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
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.
public class User {
 
	private Integer id;
 	private String name;
 	private Set<Order> orders=new  HashSet<Order>();
	
 	public Set<Order> getOrders() {
 		return orders;
 	}

	 public void setOrders(Set<Order> orders) {
	 this.orders = orders;
	 }
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public User() {
		
	}
	public User(Integer id, String name) {
		
		this.id = id;
		this.name = name;
	}
}





Код: 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.
public class Order  {
	 
	private Integer id;
	private Integer id_user;
	private String item;

	public Order() {
	}
		
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Integer getId_user() {
		return id_user;
	}
	public void setId_user(Integer id_user) {
		this.id_user = id_user;
	}
	public String getItem() {
		return item;
	}
	public void setItem(String item) {
		this.item = item;
	}
	 	
}



два маппинга xml

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<hibernate-mapping>
    <class name="com.mycompany.User" table="USERS">
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <generator class="identity" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" length="20" />
        </property>
       <set name="orders" table="ORDERS" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="ID" not-null="true" />
            </key>
            <one-to-many class="com.mycompany.Order" />
        </set>
    </class>
</hibernate-mapping>






Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<hibernate-mapping>
    <class name="com.mycompany.Order" table="ORDERS">
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <generator class="identity" />
        </id>
       
        <property name="id_user" type="java.lang.Integer">
            <column name="ID_USER" />
        </property>
       
        <property name="item" type="java.lang.String">
            <column name="ITEM" />
        </property>
       
    </class>
</hibernate-mapping>



Работаю в Hibernate

Как создать связь один ко многим между таблицами.(У одного usera может быть несколько Orders)

Как я понял в классе user мы делаем атрибут private Set<Order> orders;
А в классе Orders как?

и что мы делаем в xml файлах?

Помогите, только учусь еще.
Спасибо!
...
Рейтинг: 0 / 0
23.04.2015, 09:47
    #38943208
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate связи между таблицами
goldenhawkКак создать связь один ко многим
тут в форуме полно Рабочих заготовок, поищи....запусти...протести
...
Рейтинг: 0 / 0
23.04.2015, 09:55
    #38943221
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate связи между таблицами
Не брезгуйте читать официальный мануал. Он очень детальный и в тоже время написан доступно.
В главе про ассоциации есть ответы на все ваши вопросы.
https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/associations.html

goldenhawk Как создать связь один ко многим между таблицами.(У одного usera может быть несколько Orders)
Как я понял в классе user мы делаем атрибут private Set<Order> orders;

Сам спросил, сам ответил. Вот только с терминологией беда.
private Set<Order> orders это объявление поля класса User.
orders это свойство сущности User с точки зрения Hibernate ORM
Методы аккцессоры getOrders и setOrders формируют так же свойство бина (JavaBean) User.


авторА в классе Orders как?Как создать связь один ко многим между таблицами.(У одного usera может быть несколько Orders)

1. Можно не создавать никак. Односторонние связи допустимы.
2. Можно добавить поле\свойство user. И, скорее всего, нужно. Свойство id_user избыточно и его стоит убрать.
3. А вот, действительно ли вам нужно свойство User.orders - это вопрос открытый. Количество заказов со временем растет. Заказы обрабатываются в порядке очереди, или как-то ещё, но не отдельно по пользователям. Пригодится User.orders может разве что в отчетах. Но для отчетов Hibernate использовать ИМХО, вредно.
...
Рейтинг: 0 / 0
23.04.2015, 10:25
    #38943253
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate связи между таблицами
Плюс к вышесказанному: в меппинге, что на стороне one-to-many, что на стороне many-to-one следует указывать название столбца для внешнего ключа в подчиненной таблице. Сейчас указано
Код: xml
1.
2.
3.
            <key>
                <column name="ID" not-null="true" />
            </key>


- совпадает с названием PK для ORDERS. Аннотации в этом смысле более выразительны (@JoinColumn)
...
Рейтинг: 0 / 0
23.04.2015, 10:36
    #38943266
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate связи между таблицами
ivanra,

Точно. Совсем забыл упомянуть аннотации. Про них в мануале тоже жирно отписано
https://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate связи между таблицами / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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