Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate OneToMany / 7 сообщений из 7, страница 1 из 1
25.09.2013, 20:23:35
    #38407730
z3r9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate OneToMany
Здравствуйте. Не получается установить связь 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
25.09.2013, 22:16:17
    #38407803
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate OneToMany
Что за "имя вызываемого значения" и что такое "вызов OneToMany" это тип ассоциации. Его нельзя "вызвать"
...
Рейтинг: 0 / 0
26.09.2013, 17:16:20
    #38408743
z3r9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate OneToMany
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
26.09.2013, 17:30:21
    #38408770
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate OneToMany
Ну, и какое отношение ошибка в 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
26.09.2013, 17:38:59
    #38408784
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate OneToMany
тут может и jsf ни при чем - в классе Offer действительно нет поля price
...
Рейтинг: 0 / 0
26.09.2013, 17:43:11
    #38408791
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate OneToMany
ivanraтут может и jsf ни при чем - в классе Offer действительно нет поля price
Тогда бы класс в ошибке был Offer, а не PersistentSet.
...
Рейтинг: 0 / 0
26.09.2013, 18:54:14
    #38408905
z3r9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate OneToMany
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
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate OneToMany / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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