powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA OneToMany
25 сообщений из 33, страница 1 из 2
JPA OneToMany
    #37819878
denis11111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрий день.
Есть два Entity класа:

Код: 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.
@Entity
@Table(name = "books")
public class Books implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;
   @Column(name = "bookname")
    private String bookname;
    @OneToMany(mappedBy = "bookId")
    private List<Users> usersList;

    public Books() {
    }

    public Books(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

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

    public String getBookname() {
        return bookname;
    }

    public void setBookname(String bookname) {
        this.bookname = bookname;
    }

    @XmlTransient
    public List<Users> getUsersList() {
        return usersList;
    }

    public void setUsersList(List<Users> usersList) {
        this.usersList = usersList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Books)) {
            return false;
        }
        Books other = (Books) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "core.Books[ id=" + id + " ]";
    }
    
}



Код: 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.
@Entity
@Table(name = "users")
public class Users implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;
    @Column(name = "username")
    private String username;
    @JoinColumn(name = "book_id", referencedColumnName = "id")
    @ManyToOne
    private Books bookId;

    public Users() {
    }

    public Users(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Books getBookId() {
        return bookId;
    }

    public void setBookId(Books bookId) {
        this.bookId = bookId;
    }

   
    
}




Так вот, если я хочу вибрать всех Users по Books, то мне достаточно звернутся к списку usersList?
Тобто JPA заносит всех Users в usersList автоматически или надо писать какие-то ищо методы?

В меня что-то в usersList заносятся не все Users, а иногда после перезапуска проекта все занесутся...
...
Рейтинг: 0 / 0
JPA OneToMany
    #37819989
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis11111В меня что-то в usersList заносятся не все Users, а иногда после перезапуска проекта все занесутся...
в таких случаях пишут - Ошибка в 17 строке, т.к. кто кроме тебя разберётся в "что-то" и "иногда".
Дебажь и тестируй
...
Рейтинг: 0 / 0
JPA OneToMany
    #37820083
denis11111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот зделал я выборку всех записей из таблицы Books. В меня создался список обьектов Books. Вы знаете что каждый обьект это своего рода отдельная строка в таблице.

Как вы видете в коде выше, в Entity-класе Books есть "List<Users> usersList", который должен бы хранить список обьектов Users, которые привязаны к текущему обьекту Books.

Вот usersList меня и интересует, он сам заполняется или нет
...
Рейтинг: 0 / 0
JPA OneToMany
    #37820159
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
denis11111Вот usersList меня и интересует, он сам заполняется или нет
сами, во время вызова
Код: java
1.
aBook.getUsersList()


при условии, что aBook находится в контексте (PersistenceContext).

Другой вопрос, что если в список (полученный aBook.getUsersList()) добавить нового юзера, то новый не сохранится.
...
Рейтинг: 0 / 0
JPA OneToMany
    #37820210
denis11111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что надо делать чтоб userList оновлялся?
...
Рейтинг: 0 / 0
JPA OneToMany
    #37820284
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
denis11111А что надо делать чтоб userList оновлялся?
создать объект aUsers, setBook(abook) (кстати, в твоем случае bookId, что не красиво), em.pesist(aUsers).Где em - EntityManager

или

настроить каскад (см cascade, CascadeType) со стороны Book и сохранять как em.merger(aBook). Но здесь свои тараканы....
...
Рейтинг: 0 / 0
JPA OneToMany
    #37820319
denis11111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Entyty-Books
Код: 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.
@Entity
@Table(name = "books")
public class Books implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;
    @Column(name = "bookname")
    private String bookname;
    @OneToMany(mappedBy = "bookId")
    private List<Users> usersList;

    public Books() {
    }

    public Books(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

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

    public String getBookname() {
        return bookname;
    }

    public void setBookname(String bookname) {
        this.bookname = bookname;
    }

    @XmlTransient
    public List<Users> getUsersList() {
        return usersList;
    }

    public void setUsersList(List<Users> usersList) {
        this.usersList = usersList;
    }




Entyty-Users
Код: 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.
@Entity
@Table(name = "users")
public class Users implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;
    @Column(name = "username")
    private String username;
    @JoinColumn(name = "book_id", referencedColumnName = "id")
    @ManyToOne
    private Books bookId;

    public Users() {
    }

    public Users(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Books getBookId() {
        return bookId;
    }

    public void setBookId(Books bookId) {
        this.bookId = bookId;
    }
    
}



Абстрактной клас модели
Код: 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.
public abstract class AbstractFacade<T> {
    private Class<T> entityClass;

    public AbstractFacade(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    protected abstract EntityManager getEntityManager();

    public void create(T entity) {
        getEntityManager().persist(entity);
    }

    public void edit(T entity) {
        getEntityManager().merge(entity);
    }

    public void remove(T entity) {
        getEntityManager().remove(getEntityManager().merge(entity));
    }

    public T find(Object id) {
        return getEntityManager().find(entityClass, id);
    }

    public List<T> findAll() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        return getEntityManager().createQuery(cq).getResultList();
    }
  
}



Сами модели:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@Stateless
public class BooksFacade extends AbstractFacade<Books> {
    @PersistenceContext(unitName = "TestEJBPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public BooksFacade() {
        super(Books.class);
    }
    
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@Stateless
public class UsersFacade extends AbstractFacade<Users> {
    @PersistenceContext(unitName = "TestEJBPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public UsersFacade() {
        super(Users.class);
    }
    
}



Так вот, теперь создаем контрелер:
Код: 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.
@ManagedBean(name = "MainController")
@SessionScoped
public class MainController implements Serializable {

@EJB
private core.BooksFacade bookModel;
@EJB
private core.UsersFacade userModel;

@PostConstruct
public void test(){

List<Books> res = bookModel.findAll();
Log.print(res.get(0).getUsersList().size()) // Припустим есть 2 елемента в списке, то есть на одну книгу два пользивателя

Users user = new Users();

user.setUsername("df");
user.setBookId(res.get(0));

userModel.create(user) // Создаем а потом додем нового пользывателя в таблицу Users


res = bookModel.findAll(); 
Log.print(res.get(0).getUsersList().size()) // Должно бить теперь 3 елемента в списка, а их только 2 WTF?!!

}
...
Рейтинг: 0 / 0
JPA OneToMany
    #37820936
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis11111,

200 строк кода для 2-полей ! Код + Имя.
А ведь в обычной ИС по 500 классов с 15-20-50 полями.
ЗЫ. Так, мысли вслух.
...
Рейтинг: 0 / 0
JPA OneToMany
    #37820959
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
JPA OneToMany
    #37821008
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123denis11111,
http://www.sql.ru/forum/actualthread.aspx?tid=927509&pg=2&mid=12282254&hl=book%20b%20new%20book#12282254

Petro123 прав, тут все дело в LazyInitialization

Проблема в том, что при создании нового пользователя, он отлично записывается в базу. Но он не "уведомляет" aBook, кот. уже в контексте (и возможно уже закеширована), что у нее появился новый юзер.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
        Book aBook = em.find(Book.class, 1L);

        System.out.println(aBook.getTitle() + " user count: " +
                           aBook.getUsers().size());

        User u = new User();
        u.setBook(aBook);

        javax.persistence.EntityTransaction tx = em.getTransaction();

        try {
            tx.begin();
            em.persist(u);
            //em.refresh(aBook);
            System.out.println("After saving: " + aBook.getUsers().size());
            tx.commit();
        } catch (Exception ex) {
            ex.printStackTrace();

        } finally {
            em.close();
        }



Результат:
Hibernate: select book0_.id as id3_1_, book0_.title as title3_1_, users1_.book_id as book2_3_3_, users1_.id as id3_, users1_.id as id4_0_, users1_.book_id as book2_4_0_ from book book0_ left outer join users users1_ on book0_.id=users1_.book_id where book0_.id=?
book1 user count: 11
Hibernate: insert into users (book_id) values (?)
After saving: 11

Должно быть 12. em.refresh(aBook), конечно, решит проблему. But it's odd!
...
Рейтинг: 0 / 0
JPA OneToMany
    #37824473
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Время шло, а в голове все витает мысль: а почему u (User) ничего не говорит aBook, что он изменился. Слишком трудозатратно?
И дело ведь тут не LazyInitialization, IMHO... Если уйти от коллекции, то результат останется тот же.
...
Рейтинг: 0 / 0
JPA OneToMany
    #37824547
krab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поставь
Код: java
1.
fetch=FetchType.LAZY


И тогда ты при загрузке данных с базы будешь получать не пустой список.
Но это плохой тон, загружать сразу все данные из базы. Лучше при загрузке обращайся в ручную к списку, только при необходимости, например
Код: java
1.
resultList.getUsersList().size()
...
Рейтинг: 0 / 0
JPA OneToMany
    #37824563
krab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот у меня похожая ситуация, только другая проблема)

Код: java
1.
2.
@OneToMany(mappedBy = "region")
	private List<City> cities;



Код: java
1.
2.
3.
4.
@ManyToOne(optional=false)
	@JoinColumn(name="CITY_REG_ID")
   	@NotNull
	private Region region;



Код: java
1.
2.
3.
4.
   //Новый список городов
        List<City> listOfPickCities= cits.getTarget();
       this.region.setCities(listOfPickCities);
       em.merge(this.region);




В итоге обновления нет, в чем проблема у меня?
...
Рейтинг: 0 / 0
JPA OneToMany
    #37824671
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krab,
ну дак, приведи полный код примера-теста.
...
Рейтинг: 0 / 0
JPA OneToMany
    #37824702
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123krab,
ну дак, приведи полный код примера-теста.

Каскад указать, наверное забыл:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    @OneToMany(mappedBy = "book"
               cascade = CascadeType.MERGE)

-----------------

            User u = new User();
            aBook.getUsers().add(u);
            u.setBook(aBook);
            aBook = em.merge(aBook);
...
Рейтинг: 0 / 0
JPA OneToMany
    #37824707
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krabПоставь
Код: java
1.
fetch=FetchType.LAZY


Неее, не в этом дело... ты не понял. Мне "не нравится" не ленивая инициализация (кстати, для коллекция по умолчанию она всегда ленивая), а то что EntityManager мог бы быть порасторопнее.
...
Рейтинг: 0 / 0
JPA OneToMany
    #37824721
krab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Код: 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.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
package com.kmware.ttk.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.ConfigurableNavigationHandler;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;

import org.primefaces.component.datatable.DataTable;
import org.primefaces.model.DualListModel;

import com.kmware.ttk.model.City;
import com.kmware.ttk.model.CityService;
import com.kmware.ttk.model.Region;
import com.kmware.ttk.model.RegionsDataModel;
import com.kmware.ttk.service.CitiesService;
import com.kmware.ttk.service.RegionService;

@SessionScoped
@Named("regionBean")
public class RegionManager implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -4399462461820100316L;

	@Inject
	private EntityManager em;

	@EJB
	private RegionService regionService;
	@EJB 
	private CitiesService cityService;

	private Region region;
	private DataTable dataTable;
	private transient DataModel<Region> model;
	private transient Region[] selectionModel;
	
	private DualListModel<City> cits;
	private List<City> sourceCities;
	private List<City> targetCities;



	public RegionManager() {

	}

	@PostConstruct
	public void init() {
		region = new Region();
		sourceCities = cityService.getResultList();
		targetCities= new ArrayList<City>();
		cits = new DualListModel<City>(sourceCities, targetCities);
		if (model == null) {
			model = new RegionsDataModel(this.getAllRegions());
		}
		
		if(selectionModel == null){
			selectionModel = new Region[0];
		}
		
	}
	
	private boolean isDateValid() {
		 if((this.region.getCreationDate()!=null)&&(this.region.getRegCloseDate()!=null)){
		    return this.region.getCreationDate().getTime()<=this.region.getRegCloseDate().getTime();
		 }
		 else return true;
		  }

	/**
	 * A list of all regions in the database
	 * 
	 * @return Region entities in database
	 */
	public List<Region> getAllRegions() {
		return regionService.getResultList();
	}
	
	
	

	public List<Region> getRegionsById(Long[] ids) {
		if (ids != null && ids.length > 0) {
			return em
					.createQuery(
							"select region FROM Region AS region WHERE region.regId in (:idList) order by region.regName",
							Region.class)
					.setParameter("idList", Arrays.asList(ids)).getResultList();
		} else {
			return Arrays.asList(new Region[] {});
		}
	}
	
	

	/**
	 * Find region by region id
	 * 
	 * @param id
	 *            of the region
	 * @return Region entity
	 */
	public Region getRegionById(Long id) {
		Region r = em
				.createQuery(
						"SELECT region FROM Region AS region WHERE region.regId=:id",
						Region.class).setParameter("id", id).getSingleResult();
		r.getCities().size();
		return r;
	}

	@SuppressWarnings("unchecked")
	public List<Region> getRegionsIdAndName() {
		return em
				.createQuery(
						"select region.regId as id, region.regName as name from Region region ORDER BY region.regName")
				.getResultList();
	}
	
	/* Navigation actions */
	
	/**
	 * Save new region in DB and redirect to region list
	 * @return - outcome "regionlist"
	 */
	public String newRegion() {
		if(isDateValid()){
			em.persist(this.region);
			for(City city: cits.getTarget()){
				this.region.getCities().add(city);
				city.setRegion(this.region);
				em.merge(region);
				em.persist(city);
			}
			em.merge(region);
		model = new RegionsDataModel(this.getAllRegions());
		em.refresh(region);
		this.region.getCities().size();
		return "viewRegion";
		}
		else{
			FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR,"Дата закрытия меньше даты создания", "Дата закрытия меньше даты создания"));
			return null;
		}
	}
	
	/**
	 * Update region in DB and redirect to region card
	 * @return - outcome "viewRegion"
	 */
	public String updateRegion() {
		if(isDateValid()){
			
			List<City> listOfPickCities= cits.getTarget();
			
				this.region.setCities(listOfPickCities);
				em.merge(this.region);
				model = new RegionsDataModel(this.getAllRegions());
                                em.refresh(region);
				
		return "viewRegion";
		}
		else{
			FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR,"Дата закрытия меньше даты создания", "Дата закрытия меньше даты создания"));
			return null;
		}
	}
	
	
	/**
	 * Navigation rule for plrimefaces row selection
	 */
	public void onRowSelected(){
		FacesContext fc = FacesContext.getCurrentInstance();
		ConfigurableNavigationHandler o = (ConfigurableNavigationHandler) fc
				.getApplication().getNavigationHandler();
		o.performNavigation(this.viewRegion());
	}
	
	/**
	 * Perform actions for viewing the region info
	 * @return - outcome "viewRegion"
	 */
	public String viewRegion() {
		setRegion(this.getRegionById(this.region.getRegId()));
		targetCities.clear();
		for(City city:this.region.getCities()){
			targetCities.add(city);
		}
		cits.setTarget(targetCities);

		return "viewRegion";
	}
	
	/**
	 * Perform actions for editing the region info
	 * @return - outcome "editRegion"
	 */
	public String editRegion() {
        sourceCities= cityService.getResultList();
		sourceCities.removeAll(cits.getTarget());
		cits.setSource(sourceCities);
		return "editRegion";
	}
	
	/**
	 * Perform actions for adding the region info
	 * @return - outcome "addRegion"
	 */
	public String addRegion() {
		sourceCities= cityService.getResultList();
		cits.setSource(sourceCities);
		targetCities.clear();
		cits.setTarget(targetCities);
		this.region = new Region();
		return "addRegion";
	}
	
	/**
	 * Perform actions for deleting the region. Redirecting to list
	 * @return - outcome "regionList"
	 */
	public String deleteRegion() {
//		this.regionService.sync(this.region);
		this.regionService.remove(this.region);
		return this.regionList();
	}
	
	/**
	 * Perform actions for region list view.
	 * @return - outcome "regionList"
	 */
	public String regionList() {
		this.region = new Region();
		return "regionList";
	}

	public Region getRegion() {
		return region;
	}

	public void setRegion(Region region) {
		this.region = region;
	}

	public DataTable getDataTable() {
		return dataTable;
	}

	public void setDataTable(DataTable dataTable) {
		this.dataTable = dataTable;
	}

	public DataModel<Region> getModel() {
		return model;
	}

	public void setModel(DataModel<Region> model) {
		this.model = model;
	}
	
	public Region[] getSelectionModel() {
		return selectionModel;
	}
	
	public void setSelectionModel(Region[] selectionModel) {
		this.selectionModel = selectionModel;
	}
	
	public DualListModel<City> getCits() {
		return cits;
	}

	public void setCits(DualListModel<City> cits) {
		this.cits = cits;
	}

	public List<City> getSourceCities() {
		return sourceCities;
	}

	public void setSourceCities(List<City> sourceCities) {
		this.sourceCities = sourceCities;
	}

	public List<City> getTargetCities() {
		return targetCities;
	}

	public void setTargetCities(List<City> targetCities) {
		this.targetCities = targetCities;
	}
}
...
Рейтинг: 0 / 0
JPA OneToMany
    #37824731
krab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Метод добавления работает нормально.
Метод обновления не обновляет список городов
...
Рейтинг: 0 / 0
JPA OneToMany
    #37824747
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krab,

merge() возвращает новый объект.

Код: java
1.
region = em.merge(region)
...
Рейтинг: 0 / 0
JPA OneToMany
    #37824754
krab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladmir K,
Т.е. мне нужно сделать
Код: java
1.
setRegion(em.merge(this.region));

?

И вообще если метод возвращает новый объект, то почему я вижу только одни селекты из базы?
...
Рейтинг: 0 / 0
JPA OneToMany
    #37824780
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krabVladmir K,
Т.е. мне нужно сделать
Код: java
1.
setRegion(em.merge(this.region));


?
Если честно, то я уже потерялся.
Проблемный метод public String updateRegion()?
Мне кажется что проблема с отображением. На уровне базы отрабатываться должно.

И вообще если метод возвращает новый объект, то почему я вижу только одни селекты из базы?
после
Код: java
1.
2.
3.
4.
List<City> listOfPickCities= cits.getTarget();
			
				this.region.setCities(listOfPickCities);
				em.merge(this.region);


insert должен пройти.
...
Рейтинг: 0 / 0
JPA OneToMany
    #37824799
krab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladmir K,

Да, проблемный метод updateRegion

А вот инсертов в базе нет, и проблема именно в этом. Не пойму почему так происходит...
...
Рейтинг: 0 / 0
JPA OneToMany
    #37824816
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krab,

cascade = CascadeType.MERGE

есть на Region?
...
Рейтинг: 0 / 0
JPA OneToMany
    #37824827
krab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladmir K,

Код: java
1.
2.
@OneToMany(mappedBy = "region", cascade = {CascadeType.MERGE})
	private List<City> cities;



Так тоже инсерта не наблюдаю
...
Рейтинг: 0 / 0
JPA OneToMany
    #37825210
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krab,
Код: java
1.
2.
this.region.setCities(listOfPickCities);
em.merge(this.region);


Если дебаг показывает, что listOfPickCities и region изменились, а нет инсерта, то давай лог в студию.
(<property name="hibernate.show_sql" value="true"/>)
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA OneToMany
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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