2017-01-23 3 views
1

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'); 
+0

Können Sie die DDL SQL, die Sie verwendet haben, um diese Tabellen zu erstellen? –

Antwort

0

Dies scheint ein Problem mit der Beziehung zu sein. Die Produkttabelle hat einen Fremdschlüssel category_id und kann zu keinem Zeitpunkt null sein, obwohl Sie sie als Nullwert annotieren.

Verwandte Themen