当前位置: 首页 > 知识库问答 >
问题:

尝试在spring项目中进行注册时,无法提交JPA事务

暨高洁
2023-03-14

我正在使用netbean ide for Spring项目。我在尝试进行注册(将数据保存在MySQL数据库上)时不断收到无法提交jpa事务的错误。这是错误堆栈:

Role.java电码:

package net.cdac.TMS.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "role")
public class Role {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    public Role() {

    }

    public Role(String name) {
        super();
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

User.java电码:

package net.cdac.TMS.model;

import java.util.Collection;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.persistence.JoinColumn;

@Entity
@Table(name = "user", uniqueConstraints = @UniqueConstraint(columnNames = "uemailid"))
public class User {

    @GeneratedValue(strategy =  GenerationType.IDENTITY)
    private Long id;
    @Column(name = "uname")
    private String uName;


    @Id
    @Column(name = "uemailid")
    private String uemailid;

    private String upassword;

    private String usecurityQ;

    private String usecurityA;

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(
            name = "users_roles",
            joinColumns = @JoinColumn(
                    name = "user_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(
                            name = "role_id", referencedColumnName = "id"))
    
    private Collection<Role> roles;
    public User() {

    }
    public User(String email, String password) {

    }

    public User(String Name, String email, String password, String securityQ, String securityA, Collection<Role> roles) {
        super();
        this.uName = Name;
        this.uemailid = email;
        this.upassword = password;
        this.usecurityA = securityQ;
        this.usecurityA = securityA;
        this.roles = roles;
    }

    public String getUemailid() {
        return uemailid;
    }

    public void setUemailid(String uemailid) {
        this.uemailid = uemailid;
    }
    
    public String getuName() {
        return uName;
    }

    public void setuName(String uName) {
        this.uName = uName;
    }

    public String getUpassword() {
        return upassword;
    }

    public void setUpassword(String upassword) {
        this.upassword = upassword;
    }

    public String getUsecurityQ() {
        return usecurityQ;
    }

    public void setUsecurityQ(String usecurityQ) {
        this.usecurityQ = usecurityQ;
    }

    public String getUsecurityA() {
        return usecurityA;
    }

    public void setUsecurityA(String usecurityA) {
        this.usecurityA = usecurityA;
    }
    public Collection<Role> getRoles() {
        return roles;
    }
    public void setRoles(Collection<Role> roles) {
        this.roles = roles;
    }

}

login.html代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="ISO-8859-1">
        <title>User Login</title>
    </head>
    <body>
        <header>

            <div class="header-1">
                <img class="logo" src="../images/cdacW.png" alt="C-DAC">
            </div>
        </header>
        <div class="form-center">
            <div class="center">
                <h1>Login</h1>
                <form th:action="@{/UserLogin}" method="post">
                    <!-- error message -->
                    <div th:if="${param.error}">
                        <div class="alert alert-danger">Invalid username or
                            password.</div>
                    </div>

                    <!-- logout message -->
                    <div th:if="${param.logout}">
                        <div class="alert alert-info">You have been logged out.</div>
                    </div>
                    
                    <div class="txt_field">
                        <input type="text" required>
                        <span></span>
                        <label>Email ID</label>
                    </div>
                    <div class="txt_field">
                        <input type="password" required>
                        <span></span>
                        <label>Password</label>
                    </div>
                    <div class="pass"><a href="/" th:href="@{/forgotPasswordUser}">Forgot Password?</a></div>
                    <input type="submit" value="Login">
                    <div class="signup_link">
                        Not a member? <a href="/" th:href="@{/registration}">Sign-Up</a>
                    </div>
                </form>
            </div>
        </div>
    </body>
</html>

registeration.html电码:

<!DOCTYPE html>
<html>
    <head>
        <title>Register</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.2/css/all.min.css">
    </head>

    <body>
        <header>
            <div class="header-1">
                <img class="logo" src="../images/cdacW.png" alt="C-DAC">
            </div>
        </header>
        <!-- success message -->
        <div th:if="${param.success}">
            <div class="alert alert-info">You have successfully registered!</div>
        </div>
        <div class="registeration-form"> 
            <h1>Register here</h1> 
            <form th:action="@{/registration}" method="post" th:object="${user}">
                <p>Full Name : </p>
                <input type="text" name="fullname" placeholder = "Full Name" th:field="*{uName}">  
                <p>Email id: </p>
                <input type="email" name="email" placeholder = "Email Id" th:field="*{uemail}">  
                <p>Password : </p>
                <input type="password" name="password" placeholder = "Password" th:field="*{upassword}" required autofocus="autofocus">  
                <p>Photo: </p>
                <!--input type="image" name="image" placeholder = "your photo"-->
                <p>Security Question: </p>
                <label for="SecurityQ"> </label>

                <select name="securityq" id="securityq" th:field="*{usecurityQ}">
                    <option value="Your Favourite color ">Your Favourite color</option>
                    <option value="Your first pet's name">Your first pet's name</option>
                    <option value="Your mother's maiden name">Your mother's maiden name</option>
                    <option value="Your first school">Your first school</option>
                    <option value="Your Favourite food ">Your Favourite food</option>
                    <option value="The city you live in">The city you live in</option>
                </select>
                <p>Security Answer : </p>
                <input type="text" name="securityA" placeholder = "Your answer" th:field="*{usecurityA}">  
                <p><button type="submit">Register</button></p>

                <h5>Already have an account? </h5>
                <h4><a href="/" th:href="@{/UserLogin}"> Login</a></h4>
            </form>
        </div>
    </body>
</html>

用户注册控制器。java代码:

package net.cdac.TMS.web;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import net.cdac.TMS.service.UserService;
import net.cdac.TMS.web.dto.UserRegistrationDto;

@Controller
@RequestMapping("/registration")
public class UserRegistrationController {

    private UserService userService;

    public UserRegistrationController(UserService userService) {
        super();
        this.userService = userService;
    }
    
    @ModelAttribute("user")
    public UserRegistrationDto userRegistrationDto() {
        return new UserRegistrationDto();
    }
    
    @GetMapping
    public String showRegistrationForm() {
        return "registration";
    }
    
    @PostMapping
    public String registerUserAccount(@ModelAttribute("user") UserRegistrationDto registrationDto) {
        userService.save(registrationDto);
        return "redirect:/registration?success";
    }
}

mainController.java代码:

package net.cdac.TMS.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class MainController {
    
    @GetMapping("/UserLogin")
    public String login() {
        return "UserLogin";
    }
    
    @GetMapping("/")
    public String home() {
        return "GuestHome";
    }
}

如何删除此错误?此错误的原因是什么?提前感谢您的帮助。

共有1个答案

姜博
2023-03-14

始终检查由引起的任何异常。为你:

 Caused by: java.lang.ClassCastException: class net.cdac.TMS.model.User cannot be cast to class java.io.Serializable

让您的User类实现Serializable,这应该会修复它。

 类似资料:
  • 我在使用Hibernate执行数据库更新时遇到了一个问题。当尝试repository.add(Object)操作时,它会给出一个验证异常。 我已经在模型类上添加了验证,但是我试图插入的值似乎满足了要求,所以我不知道问题出在哪里。 如果删除验证注释,repository.add(object)就可以成功完成,即。 好心看看有没有什么建议,提前谢谢。 MySQL(8.0.17)模式 Hibernate

  • 为什么测试用例需要@Transactional,其功能将在dao层中进行更新(JPA存储库),比如 当测试在没有@Transaction注释的情况下运行时,它会在行中给出以下异常 组织。springframework。刀。InvalidDataAccessApiUsageException:执行更新/删除查询;嵌套的异常是javax。坚持不懈TransactionRequiredException

  • 问题内容: 我在正在使用的一个应用程序中使用Spring和Hibernate,但是在处理事务时遇到了问题。 我有一个服务类,该类从数据库中加载一些实体,修改它们的一些值,然后(当所有内容都有效时)将这些更改提交给数据库。如果新值无效(我只能在设置它们后检查),但我不想保留更改。为了防止Spring / Hibernate保存更改,我在方法中抛出异常。但是,这导致以下错误: 这是服务: 这就是我调用

  • 我在一个应用程序中使用Spring和Hibernate,我在处理事务时遇到了问题。 我有一个服务类,它从数据库加载一些实体,修改它们的一些值,然后(当一切都有效时)将这些更改提交给数据库。如果新值无效(我只能在设置它们后检查),我不想保留更改。为了防止Spring/Hibernate保存更改,我在方法中抛出一个异常。但是,这会导致以下错误: 这就是服务: 我就是这样调用它的: 我希望发生的事情是:

  • 我试图使用Selenium/Java为我的自动化脚本运行maven项目。但是,当我执行mvn test命令时,测试并没有运行。请让我知道当我尝试运行maven项目时,cucumber测试没有被执行的问题是什么。 下面是我的pom.xml文件

  • 我有一个带MySQL的Spring Boot应用程序JPA。在我的控制器中,当我发布一个实体时,我可以调用存储库。保存,然后返回“创建/更新”对象。 但是,当我查看数据库时,我看到对象没有更新。 这是我的application.yml: 你知道我还要做什么吗? 这是我的控制器: 和MyEntityService: