尝试连接用户时出现休眠异常 - 字段“用户名”没有默认值
Posted
技术标签:
【中文标题】尝试连接用户时出现休眠异常 - 字段“用户名”没有默认值【英文标题】:Hibernate exception when trying to connect users - Field 'username' doesn't have a default value 【发布时间】:2016-05-26 16:38:44 【问题描述】:我试图让一个用户关注另一个用户,但我每次都收到错误消息。当我通过 SQL 将它插入到我的数据库中时,它可以工作,所以我在 Java 端遇到了错误。这是我的代码:
@Id
@GeneratedValue
private int id;
@Column(name = "roomie_username")
private String roomie_username;
@ManyToOne(optional=false)
@JoinColumn(name = "username", referencedColumnName="username", insertable=false, updatable=false)
private User user;
public Roomie()
this.user = new User();
public Roomie(int id, String roomie_username, User user)
super();
this.id = id;
this.roomie_username = roomie_username;
this.user = user;
我的控制器:
@RequestMapping("/user/username")
public String showUser(@PathVariable String username, Model model,
Principal principal)
User user = usersService.getUser(username);
model.addAttribute("user", user);
Roomie roomie = new Roomie();
roomie.setRoomie_username(username);
model.addAttribute("roomie", roomie);
List<Roomie> roomies = roomieService.getRoomies(username);
model.addAttribute("roomies", roomies);
return "user";
@RequestMapping(value = "/addRoomie", method = RequestMethod.POST)
public String addRoomie(Principal principal,
@Validated(value = FormValidationGroup.class) Roomie roomie)
throws IOException
String currentUsername = principal.getName();
if (currentUsername.equals(roomie.getRoomie_username()))
return "cannotadd";
else
roomie.getUser().setUsername(currentUsername);
if(roomieService.exists(roomie.getRoomie_username(), currentUsername))
return "cannotadd";
else
roomieService.saveOrUpdate(roomie);
return "roomieadded";
在我实际尝试添加室友的 JSP 中:
<sf:form id="details" method="post"
action="$pageContext.request.contextPath/addRoomie"
commandName="roomie">
<sf:input type="hidden" name="roomie_username"
path="roomie_username" />
<input class="btn btn-default" class="control"
value="Connect to user" type="submit" />
</sf:form>
我的数据库结构:
DB
这是我的错误:
org.springframework.orm.hibernate3.HibernateJdbcException: JDBC Hibernate 数据访问的异常:SQL 的 SQLException [插入 roomie (roomie_username) 值 (?)]; SQL状态[HY000];错误代码 [1364];无法插入:[com.spring.web.dao.Roomie];嵌套的 异常是 org.hibernate.exception.GenericJDBCException: could not 插入:[com.spring.web.dao.Roomie]
如果有人能提供帮助,我将不胜感激,因为我已经坚持了很长时间。
【问题讨论】:
【参考方案1】:我们可以在休眠层启用日志记录以查看传递给查询的实际输入。请参考网址https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/session-configuration.html。您可以通过 log4j 属性或 hibernate XML 进行配置。它将帮助您调试任何问题
【讨论】:
我启用了日志记录,但它只是显示相同的错误。 如果您为 org.hibernate 包启用了日志记录,您肯定能够在打印的输入查询的下一行中看到像 name1、name2 这样的输入值?人物。请再次检查。 docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/…。请打印出错误代码并记下,并查阅底层数据库手册以查看更多详细信息 只显示错误如下:WARN - SQL Error: 1364, SQLState: HY000 ERROR - Field 'username' doesn't have a default value以上是关于尝试连接用户时出现休眠异常 - 字段“用户名”没有默认值的主要内容,如果未能解决你的问题,请参考以下文章