提问者:小点点

MySQL未能初始化JPA EntityManagerFactory。我想创建两个表,其中users表是具有课程外键的主表


// User Entity
package example.registrationlogindemo.entity;

import jakarta.persistence.*;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.ArrayList;
import java.util.List;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name="users")
public class User
{
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@OneToOne
@JoinColumn(name = "id")
courses course;

@Column(nullable=false)
private String name;

@Column(nullable=false, unique=true)
private String email;

@Column(nullable=false)
private String password;

@ManyToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
@JoinTable(
        name="users_roles",
        joinColumns={@JoinColumn(name="USER_ID", referencedColumnName="ID")},
        inverseJoinColumns={@JoinColumn(name="ROLE_ID", referencedColumnName="ID")})
private List<Role> roles = new ArrayList<>();

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public courses getCourse() {
    return course;
}

public void setCourse(courses course) {
    this.course = course;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public List<Role> getRoles() {
    return roles;
}

public void setRoles(List<Role> roles) {
    this.roles = roles;
}

}

//courses entity
package example.registrationlogindemo.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToOne;
import jakarta.persistence.PrimaryKeyJoinColumn;
import jakarta.persistence.Table;

@Entity
@Table(name = "courses")
public class courses {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long user_id;

@OneToOne(mappedBy = "courses")
User user;

@Column(nullable=false)
private Long java;

public Long getUser_id() {
    return user_id;
}

public void setUser_id(Long user_id) {
    this.user_id = user_id;
}

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

public Long getJava() {
    return java;
}

public void setJava(Long java) {
    this.java = java;
}
}

共1个答案

匿名用户

类User的属性“course”与类课程中“courses”的“mappedBy”值不匹配:

类别用户:

@OneToOne
@JoinColumn(name = "id")
courses course;

课程:

@OneToOne(mappedBy = "courses")
User user;

mappedBy值的值应该为“course”。

PS:您应该将类"课程"重构为"课程"以遵循Java约定。

PS:您的域模型看起来很可疑,因为我会假设用户和课程之间存在多对多关系。