gpt4 book ai didi

java - Springframework MVC中保存的自增ID

转载 作者:行者123 更新时间:2023-12-02 00:57:11 25 4
gpt4 key购买 nike

在我的基于 Maven 的 MVC Springframework 项目中,我有一个名为 Rentals 的类,我已将其映射到同名的 PostgreSQL 表。在其中,我将 Id 配置为 Serial int,它会针对每个新条目自动递增。我的问题是:如何让 Spring 知道如果它保存一个新的 Rental 对象,它会使用其预定的 id 保存它?

这是我的租赁 java:

@Entity
@Table(name = "rentals")
public class Rentals implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@Basic(optional = false)
@NotNull
@Column(name = "id")
@SequenceGenerator(name="rentals_id_seq", sequenceName="rentals_id_seq", allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="rentals_id_seq")
private int id;

// Other column data

// Empty, only id, full and all except id constructors

// Getters and setters, hashcode, equals and tostring

}

我的DAO实现非常简单,它从一个简单的DAO接口(interface)实现,并使用私有(private)SessionFactory sessionFactory来实现CRUD操作。

我的Service实现也非常简单,它实现了一个Service接口(interface)(它是DAO接口(interface)的精确副本)并使用私有(private)MurDao murDao来实现CRUD。

这是我的 Controller :

@Controller
public class MurController {

private MurService murService;

@Autowired(required = true)
@Qualifier(value = "murService")
public void setMurService(MurService murService) {
this.murService = murService;
}

// other CRUDs for other entities

@RequestMapping(value = "/rentals", method = RequestMethod.GET)
public String listRentals(Model model) {
model.addAttribute("rental", new Rentals());
model.addAttribute("listUsers", this.murService.getUsers());
model.addAttribute("listMovies", this.murService.getMovies());
model.addAttribute("listRentals", this.murService.getRentals());
return "rental";
}

@RequestMapping(value = "/rentals/add", method = RequestMethod.POST)
public String addRental(@ModelAttribute("rental") Rentals rnt) {

try {
this.murService.getRental(rnt.getId());
this.murService.updateRental(rnt);
} catch (ObjectNotFoundException ex) {
this.murService.addRental(rnt);
}

return "redirect:/rentals";
}

@RequestMapping("/rentals/remove/{id}")
public String removeRental(@PathVariable("id") int id) {
this.murService.deleteRental(id);
return "redirect:/rentals";
}

@RequestMapping("/rentals/edit/{id}")
public String editRental(@PathVariable("id") int id, Model model) {

model.addAttribute("rental", this.murService.getRental(id));
model.addAttribute("listRentals", this.murService.getRentals());
return "rental";
}
}

最后,.jsp:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ page session="false" %>
<html><head><title>Rental Page</title><style type="text/css">.tg {border-collapse:collapse;border-spacing:0;border-color:#ccc;}.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#ccc;color:#333;background-color:#fff;}.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#ccc;color:#333;background-color:#f0f0f0;}.tg .tg-4eph{background-color:#f9f9f9}</style></head>
<body>
<c:url var="addAction" value="/rentals/add" ></c:url>

<form:form action="${addAction}" modelAttribute="rental">
<table>
<tr><td>
<form:label path="iduser">
<spring:message text="ID User"/>
</form:label></td><td>
<form:select path="iduser">
<form:options items="${listUsers}" itemValue="id" itemLabel="fullName"/>
</form:select>
</td></tr><tr><td>
<form:label path="idmovie">
<spring:message text="ID Movie"/>
</form:label></td><td>
<form:select path="idmovie">
<form:options items="${listMovies}" itemValue="id" itemLabel="title"/>
</form:select>
</td></tr><tr><td>
<form:label path="dateof">
<spring:message text="Date Of"/>
</form:label></td><td>
<form:input path="dateof" cssClass="form-control"/></td><td>
<spring:message text="Please use dd-mm-yyyy" /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="<spring:message text="Add Rental"/>" />
</td>
</tr>
</table>
</form:form> <br> <h3>Rentals List</h3>
<c:if test="${!empty listRentals}"><table class="tg"><tr>
<th>ID User</th>
<th>ID Movie</th>
<th>Date Of</th>
<th width="60">Delete</th>
</tr><c:forEach items="${listRentals}" var="rental"><tr>
<td>${rental.iduser}</td>
<td>${rental.idmovie}</td>
<td>${rental.dateof}</td>
<td><a href="<c:url value='/rentals/remove/${rental.id}'/>" >Delete</a></td>
</tr>
</c:forEach>
</table></c:if></body></html>

当前发生的情况是,每当我在“添加新租赁”按钮中设置一些信息时,.jsp 都会通过一个新的租赁对象发送,但它的 id 为 0。我不想要这个,我想要创建一个新的Rental,其id为Null或类似的东西,这样spring就知道它必须等待知道给它多少个id,因为它是自动生成和自增量的。

我该如何处理这个问题?为什么jsp通过id为0的对象发送?感谢任何和所有的帮助!

最佳答案

正如 Alan Hay 所评论的,int 原语不能为 null。这正是我所需要的。就在我切换了处理我的 Rental id 的所有整数之后,就发生了这种情况。

Información:   Rentals{id=null, iduser=testUser01, idmovie=testMovie01, dateof=Tue Jan 01 00:01:00 CST 2019}
Información: Hibernate: select nextval ('rentals_id_seq')
Información: Hibernate: insert into rentals (dateof, iduser, idmovie, id) values (?, ?, ?, ?)

它已保存到我的数据库中。非常感谢,艾伦海!

关于java - Springframework MVC中保存的自增ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57806481/

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