powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с hibernate связь один ко многим
25 сообщений из 26, страница 1 из 2
Проблемы с hibernate связь один ко многим
    #39388607
mightyducksfan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создаю связи 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
Проблемы с hibernate связь один ко многим
    #39388697
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mightyducksfan,

у тебя регистр отличается в ошибке от задекларированного
...
Рейтинг: 0 / 0
Проблемы с hibernate связь один ко многим
    #39388777
mightyducksfan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Проблемы с hibernate связь один ко многим
    #39388850
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mightyducksfanно все равно пишет туже ошибку
убери JSP и добейся безошибочной работы на сервере без него.
...
Рейтинг: 0 / 0
Проблемы с hibernate связь один ко многим
    #39388889
mightyducksfan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123mightyducksfanно все равно пишет туже ошибку
убери JSP и добейся безошибочной работы на сервере без него.

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


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

Получается проблема в jsp?
не записывается category и producer
...
Рейтинг: 0 / 0
Проблемы с hibernate связь один ко многим
    #39388969
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mightyducksfanПолучается проблема в jsp?
ты его когда писал построчно тестировал? или во сне запомнил и сразу 100 строк вывалил?
Попробуй убрать половину и выйди на функцию-метод который не работает.
...
Рейтинг: 0 / 0
Проблемы с hibernate связь один ко многим
    #39388979
mightyducksfan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Проблемы с hibernate связь один ко многим
    #39389053
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mightyducksfanЭтот селект возвращает id категории, а в объект product не заполняется поле category
Т.е проблема в мапинге , и связи между Entity.
сильно не вникал, но я не понял вот что.
Ты сделай точно такой тест, но без ГУИ и JSP.
Т.е. если в JSP у тебя цикл, то выведи таким циклом в логи всё что требуется для юзверя.
Так понятно?
...
Рейтинг: 0 / 0
Проблемы с hibernate связь один ко многим
    #39389115
mightyducksfan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123mightyducksfanЭтот селект возвращает id категории, а в объект product не заполняется поле category
Т.е проблема в мапинге , и связи между Entity.
сильно не вникал, но я не понял вот что.
Ты сделай точно такой тест, но без ГУИ и JSP.
Т.е. если в JSP у тебя цикл, то выведи таким циклом в логи всё что требуется для юзверя.
Так понятно?
делал с gui и jsp, просто убрал category и producer.

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

Т.е. мапинг таблиц надо настроить, чтобы он автоматически заполнял
...
Рейтинг: 0 / 0
Проблемы с hibernate связь один ко многим
    #39389208
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Проблемы с hibernate связь один ко многим
    #39389212
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mightyducksfanТаблицы с данными все естьперепроверьте наличие данных в колонке ID_CATEGORY :
Код: sql
1.
SELECT COUNT(*) FROM PRODUCTS WHERE ID_CATEGORY IS NULL; -- если 0, то все ОК
...
Рейтинг: 0 / 0
Проблемы с hibernate связь один ко многим
    #39389218
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,
хм...
по поводу этого, Модель данных конечно должна быть верная и не ошибочная в БД.
Иначе просто очистить всё что есть и начать тесты с нуля.
...
Рейтинг: 0 / 0
Проблемы с hibernate связь один ко многим
    #39389249
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

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

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

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

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

это у меня обновление, а при добавлении, все так же сделано, и в пост запрос даже не переходит. кидает на страницу 400 bad request
разумеется в createController
Product product = new Product();
model.addAttribute("product",product); передаю
...
Рейтинг: 0 / 0
Проблемы с hibernate связь один ко многим
    #39389994
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Проблемы с hibernate связь один ко многим
    #39390652
mightyducksfan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Проблемы с hibernate связь один ко многим
    #39390661
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Проблемы с hibernate связь один ко многим
    #39390671
mightyducksfan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Проблемы с hibernate связь один ко многим
    #39390685
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mightyducksfanПолучается проблема в jsp?Да
...
Рейтинг: 0 / 0
Проблемы с hibernate связь один ко многим
    #39391563
mightyducksfan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Проблемы с hibernate связь один ко многим
    #39391573
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Проблемы с hibernate связь один ко многим
    #39391646
mightyducksfan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
25 сообщений из 26, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с hibernate связь один ко многим
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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