Я использую Springboot с Hibernate и хочу сохранить новый «пост», используя POST-запрос к моей базе данных. Одна вещь, которую я хотел бы выделить, это то, что я использую зависимость «spring-boot-starter-data-rest».
Схема базы данных (MySQL): Шма:
Пользователь класса:
@Entity
@Table(name="user")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id", nullable = false)
public int id;
@OneToMany(mappedBy = "user_id_fk")
public Set<Post> posts;
@Column(name="email")
private String email;
@Column(name="username")
private String username;
@Column(name="password")
private String password;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
@Column(name="create_time")
protected Date createTime;
@Column(name="type")
private String accountType;
public User() {
this.createTime = new java.util.Date();
}
public User(String email, String username, String password, String firstName, String lastName, Date createTime, String accountType) {
this.email = email;
this.username = username;
this.password = password;
this.firstName = firstName;
this.lastName = lastName;
this.createTime = createTime;
this.accountType = accountType;
this.createTime = new java.util.Date();
}
public User(int id, String email, String username, String password, String firstName, String lastName, Date createTime, String accountType) {
this.id = id;
this.email = email;
this.username = username;
this.password = password;
this.firstName = firstName;
this.lastName = lastName;
this.createTime = createTime;
this.accountType = accountType;
this.createTime = new java.util.Date();
}
Плюс геттеры, сеттеры и toSting ().
Сообщение класса:
@Entity
@Table(name="post")
public class Post implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
public int id;
@ManyToOne(optional = false)
@JoinColumn(name = "user_id_fk", nullable = false)
public User user_id_fk;
@Column(name="comment")
private String comment;
@Column(name="likes")
private int likes;
@Column(name="dislike")
private int dislike;
@Column(name="create_time")
protected Date createTime;
public Post() {
this.createTime = new java.util.Date();
}
public Post(String comment, int likes, int dislike, User user_id_fk) {
this.user_id_fk = user_id_fk;
this.comment = comment;
this.likes = likes;
this.dislike = dislike;
this.createTime = new java.util.Date();
}
public Post(int id, User user_id_fk, String comment, int likes, int dislike) {
this.id = id;
this.user_id_fk = user_id_fk;
this.comment = comment;
this.likes = likes;
this.dislike = dislike;
this.createTime = new java.util.Date();
}
Плюс Getters & Setters & toSting ().
Запрос на отправку (я использую Postman для отправки запроса):
{
"comment" : "This is a comment",
"likes" : 123,
"dislike" : 1,
"user_id_fk" :
[
{
"id" : 1
}
]
}
В запросе на "user_id_fk" я пробовал с [ {"id": 1}] и с {"id": 1}, но результат был тем же.
Проблема:
Когда я выполняю точно такой же код с моего контроллера, все работы исключены. Имейте в виду, что я использую зависимость «spring-boot-starter-data-rest». Кроме того, когда я выполняю код без “optional = false”
и “nullable = false”
, данные вставляются в базу данных, но «user_id_fk» имеет значение null: (.
Ошибка, которую я получаю:
not-null property references a null or transient value : com.citizen.citizen.entity.Post.user_id_fk;
nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value : com.citizen.citizen.entity.Post.user_id_fk]
Это означает, что внешний ключ ("user_id_fk")
имеет значение NULL, но не должен иметь значение NULL. Любая помощь будет принята с благодарностью.