powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate OneToMany
7 сообщений из 7, страница 1 из 1
Hibernate OneToMany
    #38407730
z3r9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Не получается установить связь OneToMany в Hibernate.

Класс Task:
Код: 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.
@javax.persistence.Entity
@Table(name="task")
public class Task implements Entity<Long>{

    public Long id;
    public Set<Offer> offers;

    @Id
    @Column(name="ID", unique = true, nullable = false)
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "task")
    public Set<Offer> getOffers() {
        return offers;
    }

    public void setOffers(Set<Offer> offers) {
        this.offers = offers;
    }
}




Класс Offer:
Код: 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.
@javax.persistence.Entity
@Table(name="offer")
public class Offer implements Entity<Long>{

    public Long id;
    public Task task;

    @Id
    @Column(name="ID", unique = true, nullable = false)
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @ManyToOne
    @JoinColumn(name = "taskID")
    public Task getTask() {
        return task;
    }

    public void setTask(Task task) {
        this.task = task;
    }
}



Вызов OneToMany не работает:
Код: java
1.
2.
    Long id = Long.valueOf(1);
    test= getTaskDao().findOne(id).getOffers();




Выводит ошибку The class 'org.hibernate.collection.internal.PersistentSet' does not have the property 'имя вызываемого значения '.

Подскажите почему не хочет работать связь OneToMany?
...
Рейтинг: 0 / 0
Hibernate OneToMany
    #38407803
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за "имя вызываемого значения" и что такое "вызов OneToMany" это тип ассоциации. Его нельзя "вызвать"
...
Рейтинг: 0 / 0
Hibernate OneToMany
    #38408743
z3r9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz , вызов поля, я в JSF так вызываю:

Код: java
1.
2.
3.
<ui:repeat value="#{taskMB.test}" var="offer">
#{offer.price}
 </ui:repeat>



И будет ошибка:
Код: java
1.
The class 'org.hibernate.collection.internal.PersistentSet' does not have the property 'price'.



По поводу вызова OneToMany, имеется ввиду использовать эту связь, получить через Task список Offer.
...
Рейтинг: 0 / 0
Hibernate OneToMany
    #38408770
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, и какое отношение ошибка в JSF имеет к Hibernate???
Посмотрите дебагом что именно находится в переменной test.
В доке, например, сказано что
http://docs.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/ui/repeat.html value - The name of a collection of items that this tag iterates over. The collection may be a List, array, java.sql.ResultSet , or an individual java Object. If the collection is null, this tag does nothing.
У вас там в value - Set, по которому repeat, судя по доке, итерироваться не имеет.
Поэтому в переменную offer попадает set целиком, а не его элемент.
...
Рейтинг: 0 / 0
Hibernate OneToMany
    #38408784
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тут может и jsf ни при чем - в классе Offer действительно нет поля price
...
Рейтинг: 0 / 0
Hibernate OneToMany
    #38408791
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraтут может и jsf ни при чем - в классе Offer действительно нет поля price
Тогда бы класс в ошибке был Offer, а не PersistentSet.
...
Рейтинг: 0 / 0
Hibernate OneToMany
    #38408905
z3r9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz , огромное вам спасибо, сделал. Я подумал что эта ошибка hibernate а не JSF. Честно говоря пробовал за место Set подставлять лист но была ошибка:

Код: java
1.
failed to lazily initialize a collection of role: ... , no session or session was closed



И fetch = FetchType.LAZY как написано в мануалах не помогала. И тут я сделал генеральный вывод что с Set же инициализация работала, и решил остановиться на Set.

Сейчас аннотацию написал так:
Код: java
1.
2.
3.
4.
@OneToMany(fetch=FetchType.EAGER, mappedBy = "task")
    public List<Offer> getOffers() {
        return offers;
    }



И о Blazkowicz все заработало. Спасибо огромное.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate OneToMany
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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