gpt4 book ai didi

java - 无法将空值分配给原始类型错误(Spring/Hibernate)

转载 作者:可可西里 更新时间:2023-11-01 07:17:44 25 4
gpt4 key购买 nike

我的数据库中有 3 个表 - Booking、Restaurant 和 RestaurantTable。现在我正在尝试创建一个新预订,其中一个步骤是添加一张 table 。当我尝试添加此表时出现以下错误:

 org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type @javax.persistence.Column int for value 'null'; nested exception is java.lang.IllegalArgumentException: A null value cannot be assigned to a primitive type

我不知道为什么会出现该错误,因为我尝试添加的表不为空(我认为至少如此)。希望你明白我的意思。

我在数据库中的预订表:

CREATE TABLE `booking` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`R_id` int(11) NOT NULL,
`date` date not null,
`start` TEXT,
`duration` float(3,1),
`amount_of_people` int,
`name` TEXT,
`contact_preference` TEXT,
`phone_number` TEXT,
`comments` TEXT,
`current_datetime` datetime default current_timestamp,
`new_date` datetime default current_timestamp,
`deleted` bool default false,
`edited` bool default false,
`table_number` int,
PRIMARY KEY (`id`),
FOREIGN KEY (`R_id`) references `restaurant`(`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

我在数据库中的 RestaurantTable:

CREATE TABLE `restaurant_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`table_size` int,
`table_number` int,
`restaurant_id` int(11),
PRIMARY KEY (`id`),
FOREIGN KEY (`restaurant_id`) references `restaurant`(`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

我要添加到预订中的表的 .jsp 文件:

<body>
<jsp:include page="../fragments/menu.jsp"/>
<div id="body">
<h2>Create new booking</h2>

<form:form method="POST" modelAttribute="booking" >
<table>
<tr>
<td>Choose a table*:</td>
<td><form:select path="tableNumber">
<form:option value="" label="--- Select ---" />
<form:options items="${tables}" itemValue="tableNumber" itemLabel="tableNumber"/>
</form:select>
</tr>
<tr>
<td colspan="3"><input type="submit" /></td>
</tr>
</table>
</form:form>
<div>
<a href="/bookings">Back to List</a>
</div>
</div>
<jsp:include page="../fragments/footer.jsp"/>

</body>

BookingController.java中的相关方法:

@RequestMapping(value = "booking/create/{id}", method = RequestMethod.GET)
public String chooseTable(@PathVariable Long id, Model model) {
Booking booking = bookingService.getBooking(id);
Restaurant restaurant = booking.getRestaurant();
Set<RestaurantTable> tableSet = restaurant.getTable();
model.addAttribute("tables", tableSet);
model.addAttribute("booking", booking);
return "chooseTable";
}

@RequestMapping(value = "booking/create/{id}", method = RequestMethod.POST)
public String chooseTableAction(@PathVariable Long id, Model model) {
return "redirect:/bookings";
}

现在预订 Controller 中的 POST 方法没有做任何事情,因为它甚至在此之前就给我一个错误。

感谢任何帮助!

最佳答案

您的代码的问题在于 Booking.java 中的 tableNumber 字段是 int 类型,但在您的 jsp 中您具有以下内容。

<form:option value="" label="--- Select ---" />

这基本上意味着选择下拉列表中的值可以为 null,在这种情况下 Spring 无法将 null 转换为原始类型,因此它会在页面加载本身时抛出此类异常。此问题有 2 种可能的解决方案:

1> 将值从 value=""更改为使用一些数字,如 value="-1"作为空白选项,并在您的应用程序逻辑中相应地处理 -1。

<form:option value="-1" label="--- Select ---" />

2> 另一种选择是将 tableNumber 字段声明为 Integer 类型而不是 int。

关于java - 无法将空值分配给原始类型错误(Spring/Hibernate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36369037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com