【发布时间】:2018-06-10 04:54:54
【问题描述】:
我在 JPA spring 项目中通过 h2 持久化了以下实体
public class Product implements DomainObject{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Version
private Integer version;
private String description;
private BigDecimal price;
private String imageUrl;
public Product() {
}
// getters and setters
}
我有一个带有表单的 HTML 页面,可以像这样输入新数据
<form class="form-horizontal" th:object="${product}"
th:action="@{/product}" method="post">
<input type="hidden" th:field="*{id}"/>
<div class="form-group">
<label class="col-sm-2 control-label">Description:</label>
<div class="col-sm-10">
<input type="text" class="form-control" th:field="*{description}"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Price:</label>
<div class="col-sm-10">
<input type="text" class="form-control" th:field="*{price}"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Image Url:</label>
<div class="col-sm-10">
<input type="text" class="form-control" th:field="*{imageUrl}"/>
</div>
</div>
<div class="row">
<button type="submit" class="btn btn-default">Submit</button>
</div>
</form>
这是从控制器处理帖子的方法
@PostMapping("/product")
public String saveOrUpdateProduct(Product product){
productService.saveOrUpdate(product);
return "redirect:/product/"+product.getId();
}
这是处理与数据库交互的自动装配服务类中的 saveOrUpdate 方法
private EntityManagerFactory emf;
@PersistenceUnit
public void setEmf(EntityManagerFactory emf) {
this.emf = emf;
}
@Override
public Product saveOrUpdate(Product domainObject) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Product savedProduct = em.merge(domainObject);
em.getTransaction().commit();
return savedProduct;
}
当我使用表单进入 HTML 页面并尝试提交时,我有
无法将类型“java.lang.String”的值转换为所需类型“java.lang.Integer”; 嵌套异常是 java.lang.NumberFormatException: For input string: "null"
【问题讨论】:
-
你说这是为了新数据,对吗?如果是这样,为什么你有
id的隐藏输入? -
@Powerlord 因为他想要保存或更新
-
这个输入到底得到了什么:
<input type="hidden" th:field="*{id}"/>。我怀疑id从控制器传递到您的模板时将为空。 -
想知道这个异常来自哪里?也许发布 EXCEPTION PLUS STACK TRACE 会有所帮助,否则您希望人们猜测。我不是在猜测。祝你好运
标签: java spring spring-mvc jpa