Ich versuche, eine Verbindung zwischen den Tabellen "Produkt" und "Kategorie" ist eins zu viele. Aber die Kategorieeinträge im Objekt Produkt, es wird nicht gefüllt. Warum?com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Spalte 'ID_category' kann nicht Null sein
@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);
public Category() { }
@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 = true)
private Category category;
@ManyToOne
@JoinColumn(name = "ID_producer", nullable = true)
private Producer producer;
@Column(name = "description")
private String description;
@Column(name = "price")
private int price;
@Column(name = "number")
private Integer number;
@Column(name = "picture")
private String picture;
Es ist mein Update-Controller. Ich aktualisiere das gefundene Produkt.
@Controller öffentliche Klasse ProductUpdateController { private statische endgültige Logger log = Logger.getLogger (ProductUpdateController.class); @Autowired private ProductService productService; @Autowired private KategorieService-KategorieService; @Autowired private ProducerService ProducerService;
@RequestMapping(value = "/products/{id}/update.html", method = RequestMethod.GET)
public String updateCourse(Model model, HttpSession session, HttpServletRequest request,
@PathVariable("id") Integer productId) {
Product product = (Product) productService.findProductById(productId);
model.addAttribute(product);
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);
Es ist meine Ansichtsseite.
<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 name="category" class="span3">
<c:forEach var="cat" items="${listCategories}">
<option value="${cat}">${cat.name}</option>
</c:forEach>
</select>
</div>
</div>
Dies ist mein SQL-Skript für diese Tabellen.
CREATE TABLE `category` (
`ID` int(11) NOT NULL,
`name` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `category` (`ID`, `name`) VALUES
(1, 'Sedan'),
(2, 'SUV'),
(3, 'Hatchback'),
(4, 'Crossover'),
(5, 'Minibus');
CREATE TABLE `producer` (
`ID` int(11) NOT NULL,
`name` varchar(30) NOT NULL,
`links` varchar(30) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `producer` (`ID`, `name`, `links`) VALUES
(1, 'Nissan', 'nissan.com'),
(2, 'Porsche', 'porsche.com'),
(5, 'Bentley', 'bentley.com');
CREATE TABLE `products` (
`ID_PRODUCT` int(11) NOT NULL,
`name` varchar(30) NOT NULL,
`ID_category` int(11) NOT NULL,
`ID_producer` int(11) NOT NULL,
`description` varchar(30) NOT NULL,
`price` int(11) NOT NULL,
`number` int(11) NOT NULL DEFAULT '10',
`picture` varchar(100) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `products` (`ID_PRODUCT`, `name`, `ID_category`, `ID_producer`, `description`, `price`, `number`, `picture`) VALUES
(1, 'Nissan 350z', 1, 1, '2.0', 30000, 10, '2009');
Können Sie die DDL SQL, die Sie verwendet haben, um diese Tabellen zu erstellen? –