java如何解决org。冬眠PropertyValue异常
我有一个BaseEntity作为超类:
@MappedSuperclass
public abstract class BaseEntity<ID> {
public static final String IS_DELETED = "is_deleted";
@Id
@GeneratedValue
private ID id;
@Column(name = IS_DELETED, columnDefinition = "TINYINT(1)")
private Boolean isDeleted;
}
和其他两个实体:
- 扩展BaseEntity的用户
@Entity @Table(name = User.TABLE_NAME) public class User extends BaseEntity<Long> { public static final String TABLE_NAME = "user"; public static final String USER_NAME = "user_name"; public static final String PASS_WORD = "pass_word"; public static final String IS_ACTIVE = "is_active"; @Column(name = USER_NAME) private String userName; @Column(name = PASS_WORD) private String passWord; @Column(name = IS_ACTIVE, columnDefinition = "TINYINT(1)") private Boolean isActive; @OneToOne(mappedBy = TABLE_NAME, cascade = CascadeType.ALL) private UserProfile userProfile; public User(){ userName = null; passWord = null; isActive = null; userProfile = new UserProfile(); } }
- 用户配置文件
@Entity @Table (name = UserProfile.TABLE_NAME) public class UserProfile { public static final String TABLE_NAME = "user_profile"; public static final String FIRST_NAME = "first_name"; public static final String LAST_NAME = "last_name"; public static final String PHONE_NUMBER = "phone_number"; public static final String EMAIL = "email"; public static final String AGE = "age"; public static final String USER_ID = "user_id"; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(name = FIRST_NAME) private String firstName; @Column(name = LAST_NAME) private String lastName; @Column(name = PHONE_NUMBER) private String phoneNumber; @Column(name = EMAIL) private String email; @Column(name = AGE) private Integer age; @OneToOne @JoinColumn(name = USER_ID, nullable = false) private User user; }
在我的UserService中,当用户想要注册时,我设置UserProfile字段,如firstName、lastName等,然后将用户对象传递到存储库以保存它。当我将cascadeType设置为all时,应该不会有问题,因为UserProfile应该插入数据库中,或者我缺少什么:
public class UserServiceImpl {
public void signUp() {
User user = new User();
user.getUserProfile().setId(user.getId());
System.out.println("Enter firstname:");
user.getUserProfile().setFirstName(ApplicationContext.getStringScanner().nextLine());
System.out.println("Enter lastname:");
user.getUserProfile().setLastName(ApplicationContext.getStringScanner().nextLine());
System.out.println("Enter username:");
String userName = ApplicationContext.getStringScanner().next();
while (repository.getUserByUserName(userName) != null) {
System.out.println("\nUsername not available!");
System.out.println("Enter username:");
userName = ApplicationContext.getStringScanner().next();
}
user.setUserName(userName);
System.out.println("Enter Password:");
String passWord = ApplicationContext.getStringScanner().next();
user.setPassWord(passWord);
System.out.println("Enter Your Phone Number:");
String phoneNumber = ApplicationContext.getStringScanner().next();
user.getUserProfile().setPhoneNumber(phoneNumber);
System.out.println("Enter Your Email:");
String email = ApplicationContext.getStringScanner().next();
user.getUserProfile().setEmail(email);
System.out.println("Enter Your age:");
Integer age = ApplicationContext.getStringScanner().nextInt();
user.getUserProfile().setAge(age);
repository.save(user);
}
}
保存在用户存储库中:
@Override
public void save(User user) {
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.persist(user);
entityManager.getTransaction().commit();
entityManager.close();
}
但是,在调用UserService注册方法后,我得到以下异常:
org.hibernate.PropertyValueException: not-null property references a null or transient value : model.UserProfile.user
共 (0) 个答案