Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с hibernate связь один ко многим / 25 сообщений из 26, страница 1 из 2
20.01.2017, 17:22
    #39388607
mightyducksfan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
Создаю связи one to many к таблице Product
Таблицы с данными все есть
Выкидывает ексепшн
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'ID_category' cannot be null

класс Product
Код: 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.
@Entity
@Table(name = "PRODUCTS")
public class Product implements Serializable {
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	@Column(name = "ID_PRODUCT")
	private int id;
	@Column(name = "name")
	private String name;

	@ManyToOne
	@JoinColumn(name = "ID_CATEGORY", nullable = false)
	@Cascade({CascadeType.MERGE, CascadeType.SAVE_UPDATE})
	private Category category;
	
	@ManyToOne
	@JoinColumn(name = "ID_PRODUCER", nullable = false)
	@Cascade({CascadeType.MERGE, CascadeType.SAVE_UPDATE})
	private Producer producer;
		
	@Column(name = "price")
	private int price;
			
	@ManyToMany(fetch = FetchType.LAZY, mappedBy = "products")
	private Set<User> users = new HashSet<User>(0);



Класс Category
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Entity
@Table(name = "CATEGORY")
public class Category implements Serializable {
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	@Column(name = "ID")
	private int id;
	@Column(name = "name")
	private String name;
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "category")
	private Set<Product> products = new HashSet<Product>(0);



Класс Producer
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@Entity
@Table(name = "Producer")
public class Producer implements Serializable {
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	@Column(name = "ID")
	private int id;
	@Column(name = "name")
	private String name;
	@Column(name = "links")
	private String links;

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "producer")
	private Set<Product> products = new HashSet<Product>(0);




update.jsp

Код: html
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.
<form:form name='updateForm' commandName="product"
			onsubmit="return validate(this); " method="POST">
			<fieldset>


				<div class="form-group">
					<label class="control-label">Name</label>
					<div class="controls">
						<form:input path="name" />
					</div>
				</div>

				<div class="form-group">
					<label class="control-label">Category</label>
					<div class="controls">
						<select id="CategoryService" name="category" class="span3">
							<c:forEach var="cat" varStatus="status" items="${listCategories}">
								<option value="${cat.id}">${cat.name}</option>
							</c:forEach>
						</select>
					</div>
				</div>
				<div class="form-group">
					<label class="control-label">Producer</label>
					<div class="controls">
						<select id="ProducerService" name="producer" class="span3">
							<c:forEach var="prod" varStatus="status" items="${listProducers}">
								<option value="${prod.id}">${prod.name}</option>
							</c:forEach>
						</select>
					</div>
				</div>
				
				<div class="form-group">
					<label class="control-label">Price</label>
					<div class="controls">
						<form:input path="price" />
					</div>
				</div>
				
				<div class="form-actions">
					<button id="updateButton" name="updateButton"
						class="btn btn-primary" type="submit">Update</button>

				</div>

			</fieldset>
		</form:form>




Update Controller

Код: 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.
@RequestMapping(value = "/products/{id}/update.html", method = RequestMethod.GET)
	public String updateCourse(Model model, HttpSession session, HttpServletRequest request,
			@PathVariable("id") Integer productId) {
		
		model.addAttribute("Product", (Product) productService.findProductById(productId));
		model.addAttribute("listCategories", categoryService.getAllCategories());
		model.addAttribute("listProducers", producerService.getAllProducers());
		Product findedProduct = (Product) productService.findProductById(productId);
		model.addAttribute(findedProduct);
		return "update";

	}

	@RequestMapping(value = "/products/{id}/update.html", method = RequestMethod.POST)
	public String updateCoursePost(Model model, HttpSession session, HttpServletRequest request,
			@PathVariable("id") Integer productId, @Valid Product product, BindingResult result)
			throws AddressException, Exception {
	
		
		product = productService.updateProduct(product);
	        log.info(product.getName()+"  is updated");
		return "redirect:/products.html";

	}
...
Рейтинг: 0 / 0
20.01.2017, 19:43
    #39388697
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
mightyducksfan,

у тебя регистр отличается в ошибке от задекларированного
...
Рейтинг: 0 / 0
20.01.2017, 23:26
    #39388777
mightyducksfan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
rema174mightyducksfan,

у тебя регистр отличается в ошибке от задекларированного
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@ManyToOne
	@JoinColumn(name = "ID_category", nullable = false)
	@Cascade({CascadeType.MERGE, CascadeType.SAVE_UPDATE})
	private Category category;
	
	@ManyToOne
	@JoinColumn(name = "ID_producer", nullable = false)
	@Cascade({CascadeType.MERGE, CascadeType.SAVE_UPDATE})
	private Producer producer;



Поменял так, но все равно пишет туже ошибку
...
Рейтинг: 0 / 0
21.01.2017, 10:23
    #39388850
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
mightyducksfanно все равно пишет туже ошибку
убери JSP и добейся безошибочной работы на сервере без него.
...
Рейтинг: 0 / 0
21.01.2017, 13:23
    #39388889
mightyducksfan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
Petro123mightyducksfanно все равно пишет туже ошибку
убери JSP и добейся безошибочной работы на сервере без него.

В контроллере написал
Код: java
1.
2.
product.setCategory(categoryService.findCategoryByID(3));
product.setProducer(producerService.findProducerById(3));


И все нормально работает

Получается проблема в jsp?
не записывается category и producer
...
Рейтинг: 0 / 0
21.01.2017, 21:50
    #39388969
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
mightyducksfanПолучается проблема в jsp?
ты его когда писал построчно тестировал? или во сне запомнил и сразу 100 строк вывалил?
Попробуй убрать половину и выйди на функцию-метод который не работает.
...
Рейтинг: 0 / 0
21.01.2017, 23:21
    #39388979
mightyducksfan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
Petro123mightyducksfanПолучается проблема в jsp?
ты его когда писал построчно тестировал? или во сне запомнил и сразу 100 строк вывалил?
Попробуй убрать половину и выйди на функцию-метод который не работает.

Проверил jsp без селектов все работает нормально.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<div class="form-group">
		<label class="control-label">Category</label>
		<div class="controls">
			<select  name="category" class="span3">
						<c:forEach var="cat" items="${listCategories}">
						<option value="${cat.id}">${cat.name}</option>
					</c:forEach>
			</select>
	</div>
</div>


Этот селект возвращает id категории, а в объект product не заполняется поле category
Т.е проблема в мапинге , и связи между Entity.
...
Рейтинг: 0 / 0
22.01.2017, 14:05
    #39389053
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
mightyducksfanЭтот селект возвращает id категории, а в объект product не заполняется поле category
Т.е проблема в мапинге , и связи между Entity.
сильно не вникал, но я не понял вот что.
Ты сделай точно такой тест, но без ГУИ и JSP.
Т.е. если в JSP у тебя цикл, то выведи таким циклом в логи всё что требуется для юзверя.
Так понятно?
...
Рейтинг: 0 / 0
22.01.2017, 18:37
    #39389115
mightyducksfan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
Petro123mightyducksfanЭтот селект возвращает id категории, а в объект product не заполняется поле category
Т.е проблема в мапинге , и связи между Entity.
сильно не вникал, но я не понял вот что.
Ты сделай точно такой тест, но без ГУИ и JSP.
Т.е. если в JSP у тебя цикл, то выведи таким циклом в логи всё что требуется для юзверя.
Так понятно?
делал с gui и jsp, просто убрал category и producer.

и если в контролере добавить добавление категории и продюсера , типа такого
product.setCategory(categoryService.findCategoryByID(Integer.parseInt(request.getParametr("category"))));
то все работает

Т.е. мапинг таблиц надо настроить, чтобы он автоматически заполнял
...
Рейтинг: 0 / 0
22.01.2017, 23:18
    #39389208
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
mightyducksfanПроверил jsp без селектов все работает нормально.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<div class="form-group">
		<label class="control-label">Category</label>
		<div class="controls">
			<select  name="category" class="span3">
						<c:forEach var="cat" items="${listCategories}">
						<option value="${cat.id}">${cat.name}</option>
					</c:forEach>
			</select>
	</div>
</div>



Этот селект возвращает id категории, а в объект product не заполняется поле category
Т.е проблема в мапинге , и связи между Entity.
копай дальше:
- выведи в лог что категории (FK) не приходит при update записи в контроллёр.
Если у тебя оба FK обязательны, то и выведи членораздельную ошибку юзверю что не выбрана категория или ...
- в отладке на F12 проверь что идёт в контроллер.
...
Рейтинг: 0 / 0
22.01.2017, 23:40
    #39389212
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
mightyducksfanТаблицы с данными все естьперепроверьте наличие данных в колонке ID_CATEGORY :
Код: sql
1.
SELECT COUNT(*) FROM PRODUCTS WHERE ID_CATEGORY IS NULL; -- если 0, то все ОК
...
Рейтинг: 0 / 0
23.01.2017, 00:20
    #39389218
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
Usman,
хм...
по поводу этого, Модель данных конечно должна быть верная и не ошибочная в БД.
Иначе просто очистить всё что есть и начать тесты с нуля.
...
Рейтинг: 0 / 0
23.01.2017, 05:37
    #39389249
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
Petro123,

Petro123Модель данных конечно должна быть верная и не ошибочная в БДДолжна, но тут какое-то странное противоречие между:
mightyducksfanТаблицы с данными все естьиmightyducksfanВыкидывает ексепшн
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'ID_category' cannot be null
...
Рейтинг: 0 / 0
23.01.2017, 13:31
    #39389474
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
Usman,
я посчитал что это при записи (когда в табле нет вообще значений).
Пусть разбирается.
Я у себя накладываю not null FK уже в базе и средствами базы, если это нужно.
...
Рейтинг: 0 / 0
23.01.2017, 23:27
    #39389945
mightyducksfan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
UsmanPetro123,

Petro123Модель данных конечно должна быть верная и не ошибочная в БДДолжна, но тут какое-то странное противоречие между:
mightyducksfanТаблицы с данными все естьиmightyducksfanВыкидывает ексепшн
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'ID_category' cannot be null

ексепшн выкидывает при записи категории в поле продукта.
...
Рейтинг: 0 / 0
24.01.2017, 00:22
    #39389957
mightyducksfan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
Petro123Usman,
я посчитал что это при записи (когда в табле нет вообще значений).
Пусть разбирается.
Я у себя накладываю not null FK уже в базе и средствами базы, если это нужно.

это у меня обновление, а при добавлении, все так же сделано, и в пост запрос даже не переходит. кидает на страницу 400 bad request
...
Рейтинг: 0 / 0
24.01.2017, 00:23
    #39389958
mightyducksfan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
mightyducksfanPetro123Usman,
я посчитал что это при записи (когда в табле нет вообще значений).
Пусть разбирается.
Я у себя накладываю not null FK уже в базе и средствами базы, если это нужно.

это у меня обновление, а при добавлении, все так же сделано, и в пост запрос даже не переходит. кидает на страницу 400 bad request
разумеется в createController
Product product = new Product();
model.addAttribute("product",product); передаю
...
Рейтинг: 0 / 0
24.01.2017, 07:13
    #39389994
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
mightyducksfanексепшн выкидывает при записи категории в поле продукта.OkmightyducksfanВ контроллере написал
Код: java
1.
2.
product.setCategory(categoryService.findCategoryByID(3));
product.setProducer(producerService.findProducerById(3));

И все нормально работаетТогда попробуйте добавить пару строчек кода в метод updateCoursePost :
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
@RequestMapping(value = "/products/{id}/update.html", method = RequestMethod.POST)
public String updateCoursePost(...) throws AddressException, Exception {
    org.springframework.util.Assert.notNull(product.getCategory());
    org.springframework.util.Assert.notNull(product.getCategory().getId());
    product = productService.updateProduct(product);
    log.info(product.getName()+"  is updated");
    return "redirect:/products.html";
}

и попробуйте снова отправить POST запрос из формы.
...
Рейтинг: 0 / 0
24.01.2017, 21:51
    #39390652
mightyducksfan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
Usmanmightyducksfanексепшн выкидывает при записи категории в поле продукта.OkmightyducksfanВ контроллере написал
Код: java
1.
2.
product.setCategory(categoryService.findCategoryByID(3));
product.setProducer(producerService.findProducerById(3));

И все нормально работаетТогда попробуйте добавить пару строчек кода в метод updateCoursePost :
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
@RequestMapping(value = "/products/{id}/update.html", method = RequestMethod.POST)
public String updateCoursePost(...) throws AddressException, Exception {
    org.springframework.util.Assert.notNull(product.getCategory());
    org.springframework.util.Assert.notNull(product.getCategory().getId());
    product = productService.updateProduct(product);
    log.info(product.getName()+"  is updated");
    return "redirect:/products.html";
}

и попробуйте снова отправить POST запрос из формы.
java.lang.IllegalArgumentException: [Assertion failed] - this argument is required; it must not be null
...
Рейтинг: 0 / 0
24.01.2017, 22:05
    #39390661
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
mightyducksfanjava.lang.IllegalArgumentException: [Assertion failed] - this argument is required; it must not be nullОтсутствует вся категория или только ее ID.

Нужно посмотреть какой из ассертов заFAILился, либо добавить сообщения:
Код: java
1.
2.
org.springframework.util.Assert.notNull(product.getCategory(), "Category is NULL");
org.springframework.util.Assert.notNull(product.getCategory().getId(), "Category.ID is NULL");
...
Рейтинг: 0 / 0
24.01.2017, 22:34
    #39390671
mightyducksfan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
Usmanmightyducksfanjava.lang.IllegalArgumentException: [Assertion failed] - this argument is required; it must not be nullОтсутствует вся категория или только ее ID.

Нужно посмотреть какой из ассертов заFAILился, либо добавить сообщения:
Код: java
1.
2.
org.springframework.util.Assert.notNull(product.getCategory(), "Category is NULL");
org.springframework.util.Assert.notNull(product.getCategory().getId(), "Category.ID is NULL");


Этот выкидывает
org.springframework.util.Assert.notNull(product.getCategory(), "Category is NULL");
категорию не заполняет
...
Рейтинг: 0 / 0
24.01.2017, 23:30
    #39390685
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
mightyducksfanПолучается проблема в jsp?Да
...
Рейтинг: 0 / 0
25.01.2017, 20:11
    #39391563
mightyducksfan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
UsmanmightyducksfanПолучается проблема в jsp?Да

System.out.println(request.getParameter("category"));
Выводит выбранную категорию

Т.е. получается jsp верно работает

Код: html
1.
2.
3.
4.
5.
<select  name="category" class="span3">
	<c:forEach var="cat" items="${listCategories}">
		<option value="${cat}">${cat.name}</option>
	</c:forEach>
</select>



Связь один ко многим
Код: java
1.
2.
3.
4.
5.
6.
@OneToMany(fetch = FetchType.LAZY,mappedBy = "category")
	private Set<Product> products = new HashSet<Product>(0);

@ManyToOne
	@JoinColumn(name = "ID_category", nullable = true)
	private Category category;
...
Рейтинг: 0 / 0
25.01.2017, 20:17
    #39391573
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
mightyducksfan,

Код: java
1.
2.
3.
4.
5.
6.
7.
@RequestMapping(value = "/products/{id}/update.html", method = RequestMethod.POST)
public String updateCoursePost(...) throws AddressException, Exception {
	product.setCategory(...);
	product = productService.updateProduct(product);
	log.info(product.getName()+"  is updated");
	return "redirect:/products.html";
}
...
Рейтинг: 0 / 0
25.01.2017, 22:02
    #39391646
mightyducksfan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с hibernate связь один ко многим
Usmanmightyducksfan,

Код: java
1.
2.
3.
4.
5.
6.
7.
@RequestMapping(value = "/products/{id}/update.html", method = RequestMethod.POST)
public String updateCoursePost(...) throws AddressException, Exception {
	product.setCategory(...);
	product = productService.updateProduct(product);
	log.info(product.getName()+"  is updated");
	return "redirect:/products.html";
}


Да так работает. уже пробывал.
Но я так понимаю, что так не правильно делать, должно заполнятся автоматически.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с hibernate связь один ко многим / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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