Java 检索记录的用户对象并将其另存为外键

Java 检索记录的用户对象并将其另存为外键,java,sql,spring,hibernate,spring-mvc,Java,Sql,Spring,Hibernate,Spring Mvc,在保存表单中的一些数据时,我还需要将FK添加到记录表中。FK是User.Id。 我知道如何从表单的输入字段保存数据,但如何将FK(int value)设置为: 是否有某种方法可以检索与已登录用户相关的对象并生成如下内容:record.setUser(用户)? 我已经在谷歌上搜索过了,但我没有找到如何实现这一点 这是我的实体类 @Entity public class Record implements java.io.Serializable{ @Id @GeneratedVa

在保存表单中的一些数据时,我还需要将FK添加到记录表中。FK是User.Id。 我知道如何从表单的输入字段保存数据,但如何将FK(int value)设置为:

是否有某种方法可以检索与已登录用户相关的对象并生成如下内容:record.setUser(用户)?
我已经在谷歌上搜索过了,但我没有找到如何实现这一点

这是我的实体类

@Entity
public class Record implements java.io.Serializable{

    @Id
    @GeneratedValue
    private int recordId;

    private String recordName;
    private String recordComment;
    private Date recordDate;
    private Integer price;
    @ManyToOne
    @JoinColumn(name = "userId", insertable = true, updatable = false)
    @Cascade({CascadeType.ALL})
    private User user;

    ......
    }

@Entity
@Table(name = "system_user")
public class User implements java.io.Serializable{

    @Id
    @GeneratedValue
    private int userId;

    @NotEmpty
    @Email
    private String email;
    @Size(min=2, max=30)
    private String name;
    private String enabled;
    @NotEmpty
    private String password;

    private String confirmPassword;

    @Enumerated(EnumType.STRING)
    @Column(name = "user_role")
    private Role role;

      @OneToMany(fetch = FetchType.EAGER,mappedBy = "user", orphanRemoval=true)
      @Cascade({CascadeType.ALL})
      private List<Record> records;

      public void addToRecord(Record record) {
        record.setUser(this);
        this.records.add(record);

      }

      ....
}
道:


更新:问题已经部分解决,上面的代码对我来说很好

您还需要创建用户对象,并使用下面的代码在记录对象中设置用户对象

record.setUser(userObj);

并且用户外键将自动保存在数据库中。

我以前尝试过,但new user()对象不包含有关已登录用户的信息(它有空字段),并且我遇到了验证错误。您必须在user对象中设置用户信息,然后保存record对象这是否意味着我需要获取用户名、用户id、,会话或DB查询中的密码和其他必需数据,然后将其设置为新用户对象?所以,我无法检索与登录用户相关的整个对象,对吗?我找到了解决方法:我编写了以下代码
public user getUserObject(int userId){user user user user=(user)sessionFactory.getCurrentSession().get(user.class,userId);return user;}
此方法通过id返回用户对象。但不幸的是,我现在在控制器中有这样的方法调用:
User User=userManager.getUserObject(userManager.getUserId(session.getAttribute(“currentUser”).toString())用户对象将包含记录对象的列表/集合,这意味着您需要创建第一个用户对象,然后在用户对象中设置所有记录,然后保存用户对象您的问题将得到解决。如果您的用户对象为null,则无法继续。我添加了以下代码:
public void addToRecord(Record Record){Record.setUser(this);this.records.add(Record);}user user=new user();user.setId(1);user.setName(“admin”)。。。其他一些setter user.addToRecord(记录);record.setUser(用户);recordService.addRecord(记录)但FK没有保存,我也没有收到任何错误消息。我已经修复了它:只需将@JoinColumn(name=“userId”,insertable=false,updateable=false)更改为@JoinColumn(name=“userId”,insertable=true,updateable=false)
 @RequestMapping(value = "/protected/add", method = RequestMethod.POST)
    public String addCost (@ModelAttribute("record") Record record,HttpSession session){
        User user = userManager.getUserObject(userManager.getUserId(session.getAttribute("currentUser").toString()));

        user.addToRecord(record);
        recordService.addRecord(record);
        return "redirect:/protected/purse";
    }
 public void addRecord(Record record) {
        sessionFactory.getCurrentSession().save(record);

    }
record.setUser(userObj);