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

spring boot字段始终为空,即使在post-ing之后也是如此

蓬化
2023-03-14

我有一个logincredential类:

public class LoginCredential {
    @Id @GeneratedValue Long userID;
    String eMail;
    String passwordHash;
    @OneToOne(mappedBy = "loginCredential", fetch = FetchType.LAZY)
    User user;
    LoginCredential(){}
    public LoginCredential(String eMail, String passwordHash, User user) 
    {
        this.eMail = eMail;
        this.passwordHash = passwordHash;
        this.user = user;
    }
}

那么我有user类:

public class User {
    @Id @GeneratedValue Long userID;
    @OneToOne(fetch = FetchType.LAZY,targetEntity = LoginCredential.class)
    @JoinColumn(name = "userID",referencedColumnName = "userID")
    @JsonIgnore
    private LoginCredential loginCredential;
    public User(){}
    public User(String eMail)
    {
          this.eMail=eMail;
    }
    public User(String eMail, LoginCredential loginCredential) {
        this.eMail = eMail;
        this.loginCredential = loginCredential;
    }
}

在我的系统中,首先创建logincredential的一个实例。

但对我来说,问题是在创建该实例之后,user字段仍然为null

由于它们是一一对应的,有没有其他的方法做它?

我已经尝试了以下操作:{“email”:“test@gmail.com”,“passwordhash”:“A665A45920422F9D417E4867EFDC4FB8A04A1F3FFF1FA07E998E86F7F7A27AE3”,“user”:{“userid”:801,“email”:“test@gmail.com”}}

我在前端使用的方法,在我的react.js应用程序中:

createUserAndCredential = () => {

  var xhr = new XMLHttpRequest();
  xhr.open('POST', 'http://localhost:8080/login/');
  xhr.setRequestHeader("Content-Type", "application/json");
  xhr.send(JSON.stringify({
    email: this.state.email,
    passwordHash: this.state.passwordHash
  }));
  let that = this;
  xhr.onreadystatechange = function() {
    if (this.readyState === 4 && this.status === 200) {
      console.log(this.responseText);
      /*
      console.log(this.responseText);
      console.log(that.state.newLoginCredential);
      */

      that.state.newLoginCredential = this.responseText.toString();


      var xhr1 = new XMLHttpRequest();
      xhr1.open('POST', 'http://localhost:8080/user/');
      xhr1.setRequestHeader("Content-Type", "application/json");
      console.log(that.state.newLoginCredential);

      let user = JSON.stringify({
        email: that.state.email,
        loginCredential: JSON.parse(that.state.newLoginCredential)
      });

      //console.log(loginCredential);

      xhr1.send(user);

    } else if (this.readyState !== 4 && this.status !== 200) {
      console.log(this.status);
    }
  };
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

这给了我一个警告:

已解决[org.springframework.http.converter.httpmessagenotreadableException:JSON分析错误:无法构造com.mua.cse616.model.logincredential的实例(尽管至少存在一个创建者):没有可从字符串值反序列化的字符串参数构造函数/工厂方法(“{”email“:”t7@gmail.com“,”passwordhash“:”A665A45920422F9D417E4867EFDC4FB8A04A1F3FFF1FA07E998E86F7F7A27AE3“}”);嵌套异常为

共有1个答案

周浩淼
2023-03-14

由于映射位于user的一侧(mappedby驻留在那里),您必须保存它才能看到填充到logincredential的更改。但您可以定义“父级”到“cascage”到“子级”中的更改:

@OneToOne(mappedBy = "loginCredential", fetch = FetchType.LAZY, cascade = CascadeType.ALL)

或者如果您不想将所有内容级联(例如删除):

@OneToOne(mappedBy = "loginCredential", fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
 类似资料:
  • 在我的Vue应用程序中,我有一组股票: 我还有一个条件元素,如下所示: 我有一个为股票设置测试属性的方法。例如: 如果在此声明下,我我看到第一的属性。但是,在模板中,当具有此属性时应该显示的元素仍未显示。为什么会这样,我该如何根据库存元素是否具有属性来动态显示/隐藏它们?

  • 问题内容: 我尝试@Inject这样的字段(它是一个jar模块,在META-INF下存在空bean.xml): IDataProvider接口 数据提供者实现import javax.enterprise.context.ApplicationScoped; 我尝试注入DataProvider的类 如果我在Wildfly上运行此命令,则注入的dataProvider始终为null(DataCont

  • 我有一个静态的AuthProvider类,它集中了所有的身份验证。 我有以下注册码。 在应用程序上注册后,我收到了一封验证电子邮件,所以我点击了它。当我下次尝试登录时,isEmailVertify返回false。经过一些研究,我认为我应该重新加载用户对象,如下所示: 不幸的是,isEmailVerified仍然返回false。有人知道为什么会这样吗?

  • 问题内容: 我在移动鼠标时在状态栏中显示document.body.scrollTop的值。在IE中,该值始终为0。为什么总是0?还有另一种方法来获取滚动条移动了多少? 问题答案: 您可能要尝试在IE中使用较旧的文档类型:

  • 我在泊坞站中心上有一个映像,我在 kubernetes 部署中使用该映像。我正在尝试调试应用程序,但是每当我对图像进行更改时,即使更改了标记,当我部署应用程序时,它仍然使用旧映像?它确实偶尔会更新,但没有任何押韵或理由。这是将图像“取消策略”设置为“始终”。 这是部署文件 我使用命令部署它 创建deployment.yaml 谢谢