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

如何使用spring boot将数据从一个html表单传递到多个表

左丘源
2023-03-14

我已经编写了三个类(UserUserCredentialAddress),我想使用映射将数据存储到表中。我正在使用JSON将数据存储到表中。

当我存储数据时,数据存储在所有表中,但在用户ID中显示1,在UserCredential ID中显示3,在地址ID中显示2,而在第一个条目中,所有ID都应该是1

班级是

package com.spring.demo.model;

import java.util.Date;

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.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

@Entity
@Table(name="user")
public class User {

    @Id
    @Column(name="user_id")
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    private String fName;

    private String lName;

    @Column(unique=true,nullable=true)
    private String email;

    @Column(unique=true,nullable=true)
    private long mobile;

    private Date dob;

    @Lob
    private byte[] image;   

    @Transient
    private String base64Image;

    @OneToOne(cascade=CascadeType.ALL,fetch =FetchType.EAGER)
    @JoinColumn(name="userCredential_id")
    private UserCredential userCredential;

    @OneToOne(cascade=CascadeType.ALL,fetch =FetchType.EAGER)
    @JoinColumn(name="add_id")
    private Address address;



    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public int getId() {
        return id;
    }

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

    public String getfName() {
        return fName;
    }

    public void setfName(String fName) {
        this.fName = fName;
    }

    public String getlName() {
        return lName;
    }

    public void setlName(String lName) {
        this.lName = lName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public long getMobile() {
        return mobile;
    }

    public void setMobile(long mobile) {
        this.mobile = mobile;
    }

    public Date getDob() {
        return dob;
    }

    public void setDob(Date dob) {
        this.dob = dob;
    }

    public byte[] getImage() {
        return image;
    }

    public void setImage(byte[] image) {
        this.image = image;
    }

    public UserCredential getUserCredential() {
        return userCredential;
    }

    public void setUserCredential(UserCredential userCredential) {
        this.userCreenter code heredential = userCredential;
    }



}

用户凭据。Java语言

package com.spring.demo.model;

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.JoinColumn;
import javax.persistence.OneToOne;

import com.fasterxml.jackson.annotation.JsonIgnore;

     @Entity
public class UserCredential {

    @Id
    @Column(name="credential_id")
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    @Column(unique=true,nullable=true)
    private String username;

    private String password;
    private String cnfrmpassword;



    @JsonIgnore
    @OneToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="user_id")
    private User user;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getCnfrmpassword() {
        return cnfrmpassword;
    }
    public void setCnfrmpassword(String cnfrmpassword) {
        this.cnfrmpassword = cnfrmpassword;
    }

    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }

}

一个ddress.java

package com.spring.demo.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="address")
public class Address {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="add_id")
    private int id;

    @Column(name="city")
    private String city;

    @Column(name="state")
    private String state;

    @Column(name="house_no")
    private String h_no;

    @ManyToOne
    @JoinColumn(name="user_id", nullable=true)
    private User user;

    public int getId() {
        return id;
    }

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

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getH_no() {
        return h_no;
    }

    public void setH_no(String h_no) {
        this.h_no = h_no;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

}

我真的不明白如何克服这个问题。

存储数据的JSON格式

{

    "fName":"suresh kumst",
    "lName":"dingh",
    "mobile":4595498366,
    "email":"ksuraj1sd00@gmail.com",
    "dob":"2012-04-23T18:25:43.511Z",
    "address":{
        "city":"noida",
        "state":"up",
        "h_no":"123"
    },
    "userCredential":{

        "username":"ksuraj1asd002",
        "password":"12345",
        "cnfrmpassword":"12345"
    }
}

和具有不同id的响应,而它们在第一个条目中应该是1,并且用户id应该有值

    {
        "id": 1,
        "fName": "suresh kumst",
        "lName": "dingh",
        "email": "ksuraj1sd00@gmail.com",
        "mobile": 4595498366,
        "dob": "2012-04-23T18:25:43.511+0000",
        "image": null,
        "userCredential": {
            "id": 3,
            "username": "ksuraj1asd002",
            "password": "12345",
            "cnfrmpassword": "12345"
        },
        "address": {
            "id": 2,
            "city": "noida",
            "state": "up",
            "h_no": "123",
            "user": null
        }
    }

共有3个答案

子车海
2023-03-14

请使用DB序列,以便更好地控制生成的ID,这里我只是分享一个示例,假设后端DB是Oracle/mysql

 @Id
   @GeneratedValue(strategy=GenerationType.AUTO, generator = "employee_sequence")
   @SequenceGenerator(name = "employee_sequence", sequenceName = "EMP_SN")
    private Long empNo;

这里EMP_SN是数据库序列。希望这能解决你的问题。

徐昊焜
2023-03-14

当您使用GeneratedValue(strategy=GenerationType.AUTO)时,底层ORM框架将使用标识列、序列或表,具体取决于底层数据库。在您的例子中,我猜它使用了一个序列(一个用于为所有表生成ID的序列)。如果是这种情况,为了实现每个表ID独立于其他表,必须为每个实体指定不同的序列名称。

如果您使用的是Hibernate,请考虑使用GenericGenerator。其他SO答案示例:

@GenericGenerator(
    name = "wikiSequenceGenerator",
    strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
    parameters = {
            @Parameter(name = "sequence_name", value = "WIKI_SEQUENCE"),
            @Parameter(name = "initial_value", value = "1000"),
            @Parameter(name = "increment_size", value = "1")
    }
)
@Id
@GeneratedValue(generator = "wikiSequenceGenerator")
田英卓
2023-03-14

在这里,您使用的是GeneratedValue(策略=GenerationType.AUTO)。一些数据库将使用公共序列来生成和分配序列号。Hibernate将创建一个表,所有实体表都将引用该表以获取下一个序列号。因此,主键将分散在实体之间。要使每个实体的主键从1开始,请对每个实体使用GeneratedValue(策略=GenerationType.IDENTITY)。

 类似资料:
  • 我对ThymLeaf和Spring相当陌生,我正在学习一门将JSP用于客户端视图页面的课程。我无法使用Spring Launalizr设置JSP,所以我转而使用Thymeleaf(我想无论如何我最终都会正常使用Thymeleaf) 我的问题是,我如何将表单数据从一种超文本标记语言传递到另一个页面?我试着查看留档,谷歌搜索,什么也找不到。 我已经尝试使用,一个类来设置对象和变量(我知道这是一种方法,

  • 问题内容: 我有两个HTML页面:form.html和display.html。在form.html中,有一种形式: 表单数据将发送到display.html。我想在display.html中显示和使用表单数据,如下所示: 那么,如何将变量从form.html传递到display.html,以便display.html中的上述代码将显示序列号,而JavaScript函数show()从第一个HTML

  • 我想把这些数据从当前的activity发送到更多的“BusinformationScard”activity。 @override public void onBindViewHolder(@nonnull ViewHolder ViewHolder,final int position){

  • 问题内容: 我的主页上有一个表单,提交后,会将用户带到网站上的另一个页面。我想将输入的表单数据传递给下一页,例如: 用户在表格中输入的电子邮件地址在哪里。我到底该如何完成? 问题答案: 最好的方法是使用POST,这是超文本传输​​协议的一种方法https://developer.mozilla.org/en- US/docs/Web/HTTP/Methods index.php site2.php

  • 我创建了一个新的电子应用程序。 在索引中。jsi使用节点文件系统加载数据 如果我试着使用require。JSIT之所以能够工作,是因为它运行在不同的线程上,而不是使用节点进行初始化,更像是一个实际的浏览器窗口。但有没有办法从索引中传递数据呢。js到main。js 我不知道我对这个问题的看法是否部分正确 如果您需要更多代码或信息,请询问!

  • 这是我正在尝试的代码 为了将脚本中的参数一个接一个地发送到文本字段中,我要做什么?有可能吗?