我LoginCredential
上课:
@Data
@Entity
public class LoginCredential implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long userID;
String eMail;
String passwordHash;
@GeneratedValue(strategy = GenerationType.AUTO)
@OneToOne(mappedBy = "loginCredential", fetch = FetchType.LAZY)
User user;
}
这是我的User
课:
@Data
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long userID;
@OneToOne(fetch = FetchType.LAZY,targetEntity = LoginCredential.class)
@JoinColumn(name = "userID",referencedColumnName = "userID")
private LoginCredential loginCredential;
}
而且我LoginCredentialController
的 POST -ing方法很简单:
@PostMapping("/login")
LoginCredential newLoginCredential(@RequestBody LoginCredential newLoginCredential) {
logger.debug(newLoginCredential);
LoginCredential a=repository.save(newLoginCredential);
logger.debug(a);
return a;
}
现在,当我尝试此命令时: curl -X POST -H "Content-Type: application/json" -d "{ \"email\": \"1\"}" http://localhost:8080/login
我得到一个LoginCredential
没有任何错误的user
字段,值得一提null
。
这就是为什么我尝试此命令的原因 curl -X POST -H "Content-Type: application/json" -d "{ \"email\": \"1\",\"user\":{} }" http://localhost:8080/login
这给了我错误的说法:
{ "status" : 500, "error" : "Internal Server Error", "message" : "org.hibernate.TransientPropertyValueException: object
references an unsaved transient instance - save the transient instance
before flushing : com.mua.cse616.Model.LoginCredential.user ->
com.mua.cse616.Model.User; org.hibernate.TransientPropertyValueException:
object references an unsaved transient instance - save the transient
instance before flushing : com.mua.cse616.Model.LoginCredential.user ->
com.mua.cse616.Model.User”,
“trace”:....
}
Application.properties
pom.xml
你有三个问题
cascade
触发User
实体创建的选项LoginCredential
。@MapsId
对标注User
,让他们共享相同的ID,否则LoginCredential
,创造了其User
将有不同的ID值两者都有@GeneratedValue(strategy = GenerationType.AUTO)
自己的@Id
列为了解决所有问题,您需要将实体更改为以下内容(我还删除了一些无用的注释和值);
@Data
@Entity
public class User {
@Id
Long userID;
@JsonBackReference
@MapsId
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "userID", referencedColumnName = "userID")
@ToString.Exclude
private LoginCredential loginCredential;
}
和
@Data
@Entity
public class LoginCredential {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long userID;
String eMail;
String passwordHash;
@JsonManagedReference
@OneToOne(mappedBy = "loginCredential", fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
private User user;
}
在最终确定端点之前,还需要设置关系的两端;
Optional.ofNullable(loginCredential.getUser())
.ifPresent(user -> user.setLoginCredential(loginCredential));
loginCredentialRepo.save(loginCredential);
本文向大家介绍SpringBoot中的Thymeleaf用法,包括了SpringBoot中的Thymeleaf用法的使用技巧和注意事项,需要的朋友参考一下 Thymeleaf Thymeleaf是最近SpringBoot推荐支持的模板框架,官网在thymeleaf.org这里。 我们为什么要用Thymeleaf来作为模板引擎呢?官网给了我们一个非常令人信服的解释: Thymeleaf is a m
本文向大家介绍SpringBoot中的Thymeleaf模板,包括了SpringBoot中的Thymeleaf模板的使用技巧和注意事项,需要的朋友参考一下 一、前言 Thymeleaf 的出现是为了取代 JSP,虽然 JSP 存在了很长时间,并在 Java Web 开发中无处不在,但是它也存在一些缺陷: 1、JSP 最明显的问题在于它看起来像HTML或XML,但它其实上并不是。大多数的JS
我有一个控制器 服务接口 我想在我的控制器中使用@autowired来使用该服务,但当我运行应用程序时,我得到以下错误 org.springframework.beans.factory.beanCreationException:创建名为“demo application”的bean时出错:注入autowired依赖项失败;嵌套异常为org.SpringFramework.Beans.Facto
null 非常感谢你的帮助
本文向大家介绍Springboot中@Value的使用详解,包括了Springboot中@Value的使用详解的使用技巧和注意事项,需要的朋友参考一下 Springboot通过@Value注解将配置文件中的属性注入到容器内组件中(可用在@Controller、@Service、@Configuration、@Component等Spring托管的类中) 1.普通字符串注入 例:yml中存在key
Eureka Discovery服务器(包括/config/*服务器上的云配置服务)正在向Eureka服务器注册,并且Eureka仪表板显示了该实例。此服务在端口9001上运行,启用SSL并进行用户身份验证。服务照常工作。 然后我创建了一个新的SpringBoot服务,它连接到Eureka并注册到它。由于使用了自签名证书,我在这篇文章中编写了一个小的SSLConfguration类:如何覆盖Spr
我们有一个SpringBoot(版本1.5.12)REST Api,带有springfox-swagger2和springfox-swagger-ui(版本2.9.2) 我可以在http://localhost:8080/swagger-ui.html看到Swagger UI 我如何配置swagger-ui来读取我的swagger.yaml/json配置文件,而不是自动生成它?我尝试了几个配置都没
我正在尝试对我的Spring Boot应用程序进行dockerize。 这是我的docker作曲文件 我的dockerfile 我可以看到我的战争已经展开。在日志中我可以看到 在/usr/local/tomcat/webapps目录中,我可以看到这个根目录。war和根文件夹存在。我用以下命令启动docker: 当我访问localhost:8080Tomcat说Http状态404-未找到。 这里是执