我试图创建一个注册用户的功能。
@Service
public class RegistrationService {
private AccountRepository accountRepository;
private UserRepository userRepository;
private final Logger logger = LogManager.getLogger(RegistrationService.class);
public Boolean createNewUser(Registration registration) {
User user = new User();
user.setUserName(registration.getUserName());
user.setPassword(registration.getPassword());
logger.info("attempting to create user: {}", user);
try {
userRepository.save(user);
} catch(Exception e) {
logger.error("Failed to register user: {}", e.getStackTrace());
return false;
}
Account account = new Account();
account.setUserId(user.getId());
account.setBillingAddress(registration.getBillingAddress());
account.setBillingCountry(registration.getBillingCountry());
account.setBillingProvince(registration.getBillingProvince());
account.setPhoneNumber(registration.getPhoneNumber());
account.setZip(registration.getZip());
logger.info("attempting to create account: {}", account);
try {
account = accountRepository.save(account);
} catch(Exception e) {
logger.error("Failed to register account: {}", e.getStackTrace());
return false;
}
return true;
}
}
我遵循了这篇文章中的建议:将空作为id保存,并Hibernate,但解决方案对我不起作用。这是我的用户类
package com.company.app.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Entity
@Table(name="user")
@Data
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String userName;
private String password;
public Long getId() {
return this.id;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserName() {
return this.userName;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return this.password;
}
}
这是我的账户类
package com.company.app.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Entity
@Table(name="account")
@Data
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long userId;
private String billingAddress;
private String billingProvince;
private String billingCountry;
private String phoneNumber;
private String zip;
public Long getId() {
return this.id;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getUserId() {
return userId;
}
public String getBillingAddress() {
return billingAddress;
}
public void setBillingAddress(String billingAddress) {
this.billingAddress = billingAddress;
}
public String getBillingProvince() {
return billingProvince;
}
public void setBillingProvince(String billingProvince) {
this.billingProvince = billingProvince;
}
public String getBillingCountry() {
return billingCountry;
}
public void setBillingCountry(String billingCountry) {
this.billingCountry = billingCountry;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getZip() {
return zip;
}
public void setZip(String zip) {
this.zip = zip;
}
}
我的日志显示了以下输出
2021-04-14 14:40:09.265 INFO 15092 --- [nio-8080-exec-1] c.c.app.service.RegistrationService : attempting to create user: User(id=null, userName=evan, password=test123)
2021-04-14 14:40:09.266 ERROR 15092 --- [nio-8080-exec-1] c.c.app.service.RegistrationService : Failed to register user: com.company.app.service.RegistrationService.createNewUser(RegistrationService.java:26)
最后,ID需要一个值。< br >在您的例子中,ID被注释为@ generated value(strategy = generation type。IDENTITY)
这意味着您不必在程序中设置ID的值。< br >但是仍然需要一个值,因此DB必须负责设置ID。< br >例如,在mysql-table中,您可以通过将ID-Column定义为
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
我猜你得到这个错误,因为你没有设置id。
尝试添加user.setId(registration.getId());
我想保存两个实体的差异。旧实体有一个id女巫不是空的。新的id值为null,所以我将它们作为ValueObject进行比较。问题是ValueChange确实保存了差异,但没有保存旧的id。ich如何做到这一点?
我想将行保存在一个简单的表中,该表包含另外两个实体的ID。经过一些尝试,我得到了以下配置。Spring Boot现在可以正确地创建表,列名称为task\u run\u id和project\u id。 但当我调用repo时。保存(参与者)创建了一行,但两列都包含0,而不是所需的ID。不会引发任何错误。 我做错了什么?此外,如果有一些声明对于实现简单的保存和以后的查询是不必要的,请告诉我。
问题内容: 如果我有两个像这样的hibernate实体: 我有一个已经存储的公司 我可以创建一个仅用其ID引用公司的人,而不是加载整个记录,例如: 它是仅保存参考还是使用更新公司? 问题答案: 是的,您可以做到。 它是否仅保存引用,还是使用name = null更新公司? 使用default ,这样,Hibernate将不执行任何操作。因此答案是:它只保存一个外键。 最有效的方法(也适用于JPA)
简而言之,我的问题是如何使用Spring data JPA保存一个具有预置主键(而不是null)的实体。 要进行解释,请考虑一个名为的简单实体类。记住,id没有设置为自动递增,它必须是一个自定义的唯一值。这只是一个小例子。我需要我的实际表中的id是一个自定义的唯一的,比如用户名。 现在,我想我必须插入一个id为101的新客户记录。所料之道是: 但是,没有插入id为101的新客户。那么,我该怎么做呢
我有实体 和EcranChampId 每次尝试保存EcranChamp元素时,我都会出现以下错误 2018-09-25 12:15:42.889警告14216---[nio-8092-exec-8]。w、 s.m.s.DefaultHandlerExceptionResolver:无法转换请求元素:org。springframework。豆子。ConversionNotSupportedExcep
我使用的是Spring数据jpa。将子实体添加到父实体后,我将父实体保存到数据库。我想得到孩子的身份证,但我发现我得到的是空的。 我在getId()方法中添加了@GeneratedValue(Strategy=GenerationType.IDENTITY),但它不起作用。 以下是模型: 父实体已经在数据库中,所以我直接找到它,父存储库entends Jpa列举 这里是我的测试代码: 我得到的输出