Java Hibernate@Id可以是字符串吗?
我有一个表格,里面有一些公司办公室的信息,它的Id是一个字符串。我试图在Hibernate中用Java Hibernate@Id可以是字符串吗?,java,spring,hibernate,Java,Spring,Hibernate,我有一个表格,里面有一些公司办公室的信息,它的Id是一个字符串。我试图在Hibernate中用@Id标记映射它,但是它给了我一个java.lang.NumberFormatException 这让我想知道是否可以使用字符串作为ID,或者我是否遗漏了什么 以下是错误: Jul 23, 2020 1:18:09 PM org.apache.catalina.core.ApplicationDispatcher invoke SEVERE: Servlet.service() for servlet
@Id
标记映射它,但是它给了我一个java.lang.NumberFormatException
这让我想知道是否可以使用字符串作为ID,或者我是否遗漏了什么
以下是错误:
Jul 23, 2020 1:18:09 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet [jsp] threw exception
java.lang.NumberFormatException: For input string: "officeCode"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at javax.el.ListELResolver.coerce(ListELResolver.java:150)
at javax.el.ListELResolver.getValue(ListELResolver.java:67)
...
这是office类:
package com.ver.company.model;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "offices")
public class Office implements Serializable{
public Office() {}
@Id
private String officeCode;
@Column
private String city;
@Column
private String phone;
@Column
private String addressLine1;
@Column
private String addressLine2;
@Column
private String state;
@Column
private String country;
@Column
private String postalCode;
@Column
private String territory;
}
}
Dao实现:
package dom.ver.company.dao;
import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import dom.ver.company.model.Office;
@Repository
public class OfficeDaoImpl implements OfficeDao {
public OfficeDaoImpl () {}
@Autowired
private SessionFactory sessionFactory;
public void insertOffice(Office office) {
sessionFactory.getCurrentSession().saveOrUpdate(office);
}
public List<Office> selectOffices() {
return sessionFactory.getCurrentSession().createQuery("from Office")
.list();
}
}
包dom.ver.company.dao;
导入java.util.List;
导入org.hibernate.SessionFactory;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Repository;
导入dom.ver.company.model.Office;
@存储库
公共类OfficeDAImpl实现OfficeDao{
公职人员名单(){}
@自动连线
私人会话工厂会话工厂;
公共空白插入办公室(办公室){
sessionFactory.getCurrentSession().saveOrUpdate(office);
}
公营办事处名单({
返回sessionFactory.getCurrentSession().createQuery(“从办公室”)
.list();
}
}
服务:
package dom.ver.company.service;
import java.sql.SQLException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import dom.ver.company.OfficeDao;
import dom.ver.company.dao.OfficeDaoImpl;
import dom.ver.company.model.Office;
@Service
@Transactional
public class OfficeServiceImpl implements OfficeService {
@Autowired
private OfficeDao officeDao;
@Override
@Transactional
public List<Office> selectOffices() {
return officeDao.selectOffices();
}
}
包dom.ver.company.service;
导入java.sql.SQLException;
导入java.util.List;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Service;
导入org.springframework.transaction.annotation.Transactional;
导入dom.ver.company.OfficeDao;
导入dom.ver.company.dao.officedaimpl;
导入dom.ver.company.model.Office;
@服务
@交易的
公共类OfficeServiceImpl实现OfficeService{
@自动连线
私人官办;
@凌驾
@交易的
公营办事处名单({
返回officeDao.selectOffices();
}
}
控制器类:
package dom.ver.company.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import dom.ver.company.model.Office;
import dom.ver.company.service.OfficeService;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
@Controller
public class OfficeController {
@Autowired
OfficeService officeServiceImpl;
OfficeController(){}
@RequestMapping({ "/", "/index" })
public ModelAndView loadIndex(ModelAndView model) {
List<Office> officeList = officeServiceImpl.selectOffices();
model.addObject("officeList", officeList);
model.setViewName("index");
return model;
}
}
包dom.ver.company.controller;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Controller;
导入org.springframework.web.bind.annotation.ModelAttribute;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RequestMethod;
导入org.springframework.web.servlet.ModelAndView;
导入dom.ver.company.model.Office;
导入dom.ver.company.service.OfficeService;
导入java.util.List;
导入javax.servlet.http.HttpServletRequest;
@控制器
公共类办公控制器{
@自动连线
OfficeService officeServiceImpl;
OfficeController(){}
@请求映射({”/“,“/index”})
公共模型和视图加载索引(模型和视图模型){
List officeList=officeServiceImpl.selectOffices();
model.addObject(“officeList”,officeList);
model.setViewName(“索引”);
收益模型;
}
}
如果未指定生成策略,Hibernate将使用GenerationType.AUTO
,这不适用于字符串
您可以这样使用它:
@Id
@GeneratedValue(generator="uuid")
@GenericGenerator(name="uuid", strategy="uuid2")
private String officeCode;
如果未指定生成策略,Hibernate将使用GenerationType.AUTO
,这不适用于String
您可以这样使用它:
@Id
@GeneratedValue(generator="uuid")
@GenericGenerator(name="uuid", strategy="uuid2")
private String officeCode;
这有用吗?请看例外情况。它不是从冬眠开始的。检查您正在使用的jsp或视图,它位于jsp中,而不是来自Hibernate。无论如何,谢谢。这有用吗?请看例外情况。它不是从冬眠开始的。检查您正在使用的jsp或视图,它位于jsp中,而不是来自Hibernate。无论如何,谢谢你。