powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / @OneToMany
22 сообщений из 22, страница 1 из 1
@OneToMany
    #38227744
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чем отличается
Код: java
1.
@OneToMany(mappedBy = "Users") 


от
Код: java
1.
2.
@OneToMany
@JoinTable(name = "id")


?
...
Рейтинг: 0 / 0
@OneToMany
    #38227767
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90Чем отличается
Код: java
1.
@OneToMany(mappedBy = "Users") 



ORM посмотрит на маппиинг сущности Users и реализует ассоциацию на основе того как замаплена ассоциация в Users на текущую сущность.


redwhite90от
Код: java
1.
2.
@OneToMany
@JoinTable(name = "id")


?
JoinTable и JoinColumn и не перепутали?
JoinTable это таблица которая связывает текущую сущность и Users.
А JoinColumn имеет указанный синтаксис. Он обозначает что id колонка текущей сущности является FK на Users.
...
Рейтинг: 0 / 0
@OneToMany
    #38227836
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
в этой замечательной статье используют @JoinTable
http://javaxblog.ru/article/java-hibernate-3/
а в комментах пишут, что это одно и то же.
исходя из этого
авторJoinTable это таблица которая связывает текущую сущность и Users.

хотелось бы объяснения

авторORM посмотрит на маппиинг сущности Users и реализует ассоциацию на основе того как замаплена ассоциация в Users на текущую сущность.

хотелось бы конкретики.
...
Рейтинг: 0 / 0
@OneToMany
    #38227866
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90в этой замечательной статье используют @JoinTable
http://javaxblog.ru/article/java-hibernate-3/
а в комментах пишут, что это одно и то же.
исходя из этого

Зачем вы опять ссылаетесь на этот дебилизм? Вроде уже выяснили в прошлой теме что статья "нелегетимна". Поэтому хватит к ней аппелировать.


redwhite90хотелось бы объяснения

Хотелось бы конкретных вопросов. Есть 3 таблицы. user, group и user_group. Соответсвтенно 2 сущности User и Group.
JoinTable("user_group") позволяет указать имя таблицы, которая связывает 2 сущности.


redwhite90хотелось бы конкретики.
Есть User и есть Group.
Есть поле user.fk_group, которое в БД реализует ссылку User на Group.
Соответсвенно
Код: java
1.
2.
3.
4.
class User{
   @JoinColumn("fk_group")
   Group group;
}


Мы указали, что User ссылаетя с на Group через колонку fk_group.
Теперь мы хотим обратную связь
Код: java
1.
2.
3.
4.
class Group{
   @OneToMany(mappedBy="group")
   Collection<User> users;
}


Group у нас на User никак не ссылается. Поэтому мы говорим, мол, смотри в User свойство group и вот как там сделано, так и связывай Group с Users со стороны Group.

JoinTable чаще используется для ManyToMany
Что-то типа такого:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    @ManyToMany(fetch=FetchType.EAGER)
    @JoinTable(name="user_group",
            joinColumns=@JoinColumn(name="fk_user", referencedColumnName="pk"),
            inverseJoinColumns=@JoinColumn(name="fk_group", referencedColumnName="pk")
    )
    public Set<Group> getGroups()
    {
        return this.groups;
    }
...
Рейтинг: 0 / 0
@OneToMany
    #38227971
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

а что поменяется если мы напишем с обоих сторон @JoinColumn ?
...
Рейтинг: 0 / 0
@OneToMany
    #38227978
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90а что поменяется если мы напишем с обоих сторон @JoinColumn ?
В каком случае поменяется? Мы тут минимум 3-4 разных случая рассматриваем.
...
Рейтинг: 0 / 0
@OneToMany
    #38228049
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90Blazkowicz,
а что поменяется если мы напишем с обоих сторон @JoinColumn ?
запусти код и помотри в логах DML. Если не изменился - значит монопесуально.
Проверить - 5 минут
...
Рейтинг: 0 / 0
@OneToMany
    #38228744
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторВ каком случае поменяется? Мы тут минимум 3-4 разных случая рассматриваем.
1.с обоих сторон joinColumn
2. c одной стороны joinColumn, с другой mappedBy
...
Рейтинг: 0 / 0
@OneToMany
    #38228761
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite901.с обоих сторон joinColumn
2. c одной стороны joinColumn, с другой mappedBy
Блин. Вопрос сформулировать лень, но требуются детальные объяснения?
Отложи в сторону вопросы маппинга и разберись с тем как ассоциации дизайнятся в RDBMS. Маппинг лишь описание того как ассоциация в базе ложится на объекты.
Поэтому рассматривать маппинг как исходную точку нельзя. Маппинг он не сам по себе источник модели. Сущности это модель. База это модель. Маппинг лишь связь между ними.
...
Рейтинг: 0 / 0
@OneToMany
    #38228857
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

база уже есть и там всё задизайнено)

Извините, что не точно выразился.
Вопрос правильно задать так:
Будет ли разница если написать в обоих таблицах, которые связаны один ко многим
1. @joinColumn с двух сторон
2. @joinColumn со стороны многие и mappedBy со стороны один
?
...
Рейтинг: 0 / 0
@OneToMany
    #38228871
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90база уже есть и там всё задизайнено)

Дык маппинг зависит от того что в базе. Показывайте что там. О каких таблицах речь? Какие там PK и FK?

redwhite90Будет ли разница если написать в обоих таблицах, которые связаны один ко многим
1. @joinColumn с двух сторон
2. @joinColumn со стороны многие и mappedBy со стороны один
?
В один ко многим у одной таблицы есть FK на другую. А у второй таблицы нет FK на эту же запись. Поэтому joinColumn с двух сторон в обычном "один ко многим" невозможен. Там просто нет этой колонки.
...
Рейтинг: 0 / 0
@OneToMany
    #38228907
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,
либо давайте БД, либо ниже FAQ картинка
...
Рейтинг: 0 / 0
@OneToMany
    #38228933
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

это всё издержки первой плохой прочитанной статьи.

Да особо показывать нечего, просто концептуальные вопросы.

Я так понимаю не обязательно чтобы в базе данных и в коде java(hibernate) были одинаковые связи?
ведь просто я так понимаю связь OneToMany подразумевает в коде обратные ссылки друг на друга?
...
Рейтинг: 0 / 0
@OneToMany
    #38228943
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123redwhite90,
либо давайте БД, либо ниже FAQ картинка
Phone->Employee ManyToOne, а не OneToOne
...
Рейтинг: 0 / 0
@OneToMany
    #38228949
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90это всё издержки первой плохой прочитанной статьи.

А так же полное нежелание формулировать вопросы.

redwhite90Да особо показывать нечего, просто концептуальные вопросы.

"а что поменяется если мы напишем с обоих сторон @JoinColumn ? " это не вопрос, это обрывок мысли.

redwhite90Я так понимаю не обязательно чтобы в базе данных и в коде java(hibernate) были одинаковые связи?

Заставить делать связи никто не может.

redwhite90ведь просто я так понимаю связь OneToMany подразумевает в коде обратные ссылки друг на друга?
Не обязательно. Связь может быть bidirectional и unidirectional. Об этом можно прочитать в мануале Hibernate.
...
Рейтинг: 0 / 0
@OneToMany
    #38228959
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczPetro123redwhite90,
либо давайте БД, либо ниже FAQ картинка
Phone->Employee ManyToOne, а не OneToOne
связи то 2-х сторонние.
Если у аффтара не так - пусть скажет-покажет.
...
Рейтинг: 0 / 0
@OneToMany
    #38228967
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123связи то 2-х сторонние.

И что?
Ассоциация "один ко многим".
Маппинг с одной стороны OneToMany, с другой ManyToOne. OneToOne откуда взялся?
...
Рейтинг: 0 / 0
@OneToMany
    #38228978
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczOneToOne откуда взялся?
это они ошиблись)))
Ты на БД смотри. Или приведи свою
...
Рейтинг: 0 / 0
@OneToMany
    #38229309
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
redwhite90ведь просто я так понимаю связь OneToMany подразумевает в коде обратные ссылки друг на друга?
Не обязательно. Связь может быть bidirectional и unidirectional. Об этом можно прочитать в мануале Hibernate.[/quot]

можно ссылку? не найти никак
...
Рейтинг: 0 / 0
@OneToMany
    #38229317
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90можно ссылку? не найти никак
Как искали?
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/associations.html
...
Рейтинг: 0 / 0
@OneToMany
    #38229547
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
на такое мапанье пишет
Код: 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.
@Entity
@Table(name="Contact")
public class Contact implements Serializable{
	
	private Integer idContact;
	
	private User User;
		
	private String value;
		
	private ContactType type;
	
	//setters and getters
	@Id
	@GeneratedValue(generator = "increment")
	@GenericGenerator(name = "increment", strategy = "increment")
	@Column(name = "idUser")
	public Integer getIdContact() {
		return idContact;
	}
	public void setIdContact(Integer idContact) {
		this.idContact = idContact;
	}
	@ManyToOne
	@JoinColumn(name="idUser")
	public User getUser() {
		return User;
	}
	public void setUser(User User) {
		this.User = User;
	}
	@Column(name = "value")
	public String getValue() {
		return value;
	}
	public void setValue(String value) {
		this.value = value;
	}
	@Column(name = "type")
	public ContactType getType() {
		return type;
	}
	public void setType(ContactType type) {
		this.type = type;
	}
	//
	
}



авторSEVERE: Servlet.service() for servlet [com.epam.printme.web.AddUser] in context with path [/PrintMe] threw exception
org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.epam.printme.model.User.contactList[com.epam.printme.model.Contact]
at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1057)
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:733)
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:668)
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:66)
at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1585)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1344)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1729)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1780)
at com.epam.printme.model.dao.DaoFactory.<init>(DaoFactory.java:17)
at com.epam.printme.model.dao.DaoFactory.getDaoFactory(DaoFactory.java:23)
at com.epam.printme.web.AddUser.doPost(AddUser.java:43)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

класс 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.
@Entity
@Table(name = "Users")
public class User implements Serializable {

	private Integer idUser;
	private String login;
	private String password;
	private String address;
	private Boolean canPrint;
	private List<Contact> contactList;
	private List<Order> orderList;
	private List<UserTemplate> userTemplateList;
	//constructor
	public User(){
		
	}
	
	//get
	@Id
	@GeneratedValue(generator = "increment")
	@GenericGenerator(name = "increment", strategy = "increment")
	@Column(name = "idUser")
	public Integer getUserId() {
		return idUser;
	}

	@Column(name = "login")
	public String getLogin() {
		return login;
	}
	@Column(name = "canPritn")
	public Boolean getCanPrint() {
		return canPrint;
	}

	@OneToMany(mappedBy = "Users")
	public List<Contact> getContactList() {
		return contactList;
	}
	@Column(name = "password")
	public String getPassword() {
		return password;
	}

	@Column(name = "address")
	public String getAddress() {
		return address;
	}
	
	@Column(name = "canPrint")
	public Boolean isCanPrint() {
		return canPrint;
	}
	
	@OneToMany(mappedBy = "Users")
	public List<Order> getOrderList() {
		return orderList;
	}
	
	@OneToMany(mappedBy = "Users")
	public List<UserTemplate> getUserTemplateList() {
		return userTemplateList;
	}
//set
	public void setCanPrint(boolean canPrint) {
		this.canPrint = canPrint;
	}

	public void setCanPrint(Boolean canPrint) {
		this.canPrint = canPrint;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public void setContactList(List<Contact> contactList) {
		this.contactList = contactList;
	}

	public void setLogin(String login) {
		this.login = login;
	}
	public void setId(Integer id) {
		this.idUser = id;
	}

	public void setOrderList(List<Order> orderList) {
		this.orderList = orderList;
	}
	public void setIdUser(Integer idUser) {
		this.idUser = idUser;
	}
...
Рейтинг: 0 / 0
@OneToMany
    #38229557
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я всё понял)
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / @OneToMany
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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