@OneToOne 带注解的休眠。无法正确保存
@OneToOne Hibernate with annotations. Can't properly save
我无法使用带注释的休眠和 jpa 自动生成我的外键。一切正常,条目保存在数据库中。所有日期都来自一个表单,在提交时创建一个带有 ModelAttribute 的用户对象,然后将其保存在数据库中。
这是我的豆子。我还有什么要补充的吗?
@Entity
@Table(name="adress")
public class Adress implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="adress_id")
private Integer adressId;
@NotBlank(message="The city must be completed")
@Column(name="city")
@Size(min=5,max=30)
private String city;
@NotBlank(message="The street must be completed")
@Column(name="street")
@Size(min=5,max=30)
private String street;
@NotNull(message="The street number must be completed")
@NumberFormat
@Column(name="street_no")
private Integer streetNo;
@OneToOne
@JoinColumn(name="user_id")
private User user;}
另一个:
@Entity
@Table(name="users")
public class User implements Serializable {
@Id
@Column(name="user_id")
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer userId;
@NotBlank(message="Username can't be blank")
@Size(min=5,max=30)
@Column(name="username")
private String username;
@NotBlank(message="Password field can't be blank")
@Size(min=5,max=30)
@Column(name="password")
private String password;
@NumberFormat
@NotNull(message="Age field must not be blank")
@Column(name="age")
private Integer age;
@Column(name="message")
@Size(min=0,max=100)
private String message;
@Column(name="date")
@DateTimeFormat(pattern="dd/mm/yyyy")
private Date dateCreated;
@OneToOne(mappedBy="user",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
private Adress adress;
+他们的 getter 和 setter
public void save(T entity){
sessionFactory.getCurrentSession().save(entity);
}
如果我对您的理解是正确的,并且您正在尝试让 Hibernate 在您的相关记录上设置外键,这可能会有所帮助。尝试摆脱 mappedBy,而是指定 JoinColumn。这对我来说适用于一对多:
顺序:
@Entity
@Table(name = "`order`")
public class Order implements Serializable {
@Id
@GeneratedValue
private Long id;
// Order columns...
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "order_id")
private Set<Item> items;
}
项目:
@Entity
@Table(name = "item")
public class Item implements Serializable {
@Id
@GeneratedValue
private Long id;
// Item columns...
@ManyToOne(optional = false)
@JoinColumn(name = "order_id", referencedColumnName = "id", nullable = false)
private Order order;
}
地址class
@OneToOne(mappedBy="adress")
private User user;
并在用户 class
中
@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER,optional=false)
@PrimaryKeyJoinColumn
private Adress adress;
我无法使用带注释的休眠和 jpa 自动生成我的外键。一切正常,条目保存在数据库中。所有日期都来自一个表单,在提交时创建一个带有 ModelAttribute 的用户对象,然后将其保存在数据库中。 这是我的豆子。我还有什么要补充的吗?
@Entity
@Table(name="adress")
public class Adress implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="adress_id")
private Integer adressId;
@NotBlank(message="The city must be completed")
@Column(name="city")
@Size(min=5,max=30)
private String city;
@NotBlank(message="The street must be completed")
@Column(name="street")
@Size(min=5,max=30)
private String street;
@NotNull(message="The street number must be completed")
@NumberFormat
@Column(name="street_no")
private Integer streetNo;
@OneToOne
@JoinColumn(name="user_id")
private User user;}
另一个:
@Entity
@Table(name="users")
public class User implements Serializable {
@Id
@Column(name="user_id")
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer userId;
@NotBlank(message="Username can't be blank")
@Size(min=5,max=30)
@Column(name="username")
private String username;
@NotBlank(message="Password field can't be blank")
@Size(min=5,max=30)
@Column(name="password")
private String password;
@NumberFormat
@NotNull(message="Age field must not be blank")
@Column(name="age")
private Integer age;
@Column(name="message")
@Size(min=0,max=100)
private String message;
@Column(name="date")
@DateTimeFormat(pattern="dd/mm/yyyy")
private Date dateCreated;
@OneToOne(mappedBy="user",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
private Adress adress;
+他们的 getter 和 setter
public void save(T entity){
sessionFactory.getCurrentSession().save(entity);
}
如果我对您的理解是正确的,并且您正在尝试让 Hibernate 在您的相关记录上设置外键,这可能会有所帮助。尝试摆脱 mappedBy,而是指定 JoinColumn。这对我来说适用于一对多:
顺序:
@Entity
@Table(name = "`order`")
public class Order implements Serializable {
@Id
@GeneratedValue
private Long id;
// Order columns...
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "order_id")
private Set<Item> items;
}
项目:
@Entity
@Table(name = "item")
public class Item implements Serializable {
@Id
@GeneratedValue
private Long id;
// Item columns...
@ManyToOne(optional = false)
@JoinColumn(name = "order_id", referencedColumnName = "id", nullable = false)
private Order order;
}
地址class
@OneToOne(mappedBy="adress")
private User user;
并在用户 class
中@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER,optional=false)
@PrimaryKeyJoinColumn
private Adress adress;