尝试连接用户时出现休眠异常 - 字段“用户名”没有默认值

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

以上是关于尝试连接用户时出现休眠异常 - 字段“用户名”没有默认值的主要内容,如果未能解决你的问题,请参考以下文章

定义映射时出现休眠异常

在休眠中使用@Column 注释时出现异常

保存我的对象时出现休眠异常

在 Linux 下运行时出现奇怪的休眠异常

SharePoint 创建SSP时出现异常,信息如 设置失败: 找不到 Windows NT 用户或组 '

尝试通过 websocket 转换和发送时出现空指针异常