我正在REST中开发一个CRUD操作,但坚持使用hibernate关系,当我做CURD时没有任何工作正常。请帮帮我。以下是问题:
@Entity
@Table(name = "reminder")
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "reminder")
//@JsonInclude(JsonInclude.Include.NON_NULL)
public class Reminder implements Serializable {
private static final long serialVersionUID = -1232395859408322328L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "reminder_id")
private int reminderId;
@JsonIgnore
@OneToOne(mappedBy = "reminder", cascade = CascadeType.ALL, fetch = FetchType.EAGER, optional = true)
private Contract contract;
@JsonIgnore
@OneToOne(mappedBy = "reminder", cascade = CascadeType.ALL, fetch =
FetchType.EAGER, optional = true)
private Asset asset;
//@JsonIgnore
@OneToOne(mappedBy = "reminder", cascade = CascadeType.ALL, fetch =
FetchType.LAZY, optional = true)
private StaffRecord staffRecords;
}
@Entity
@Table(name="staff_record")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "staff_record")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class StaffRecord implements Serializable
{
private static final long serialVersionUID = -1232395859408322328L;
//----- all database columns in Staff_Record table--------
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="staff_record_id")
private int staffRecordId;
//@JsonBackReference
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "reminder_id")
private Reminder reminder;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
@JoinColumn(name="staff_id", referencedColumnName="staff_id")
private Staff staffs;
@ManyToOne(fetch = FetchType.EAGER,cascade=CascadeType.REMOVE)
@JoinColumn(name = "record_type_id", referencedColumnName = "record_type_id")
private RecordType rocrdType;
}
@Entity
@Table(name="staff")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "staff")
public class Staff implements Serializable
{
private static final long serialVersionUID = -1232395859408322328L;
//----- all database columns in Equipment table--------
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="staff_id")
private int staff_Id;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.MERGE, optional=false)
@JoinColumn(name="department_id" )
private Department departments;
@JsonIgnore
@OneToMany(mappedBy="staffs", fetch=FetchType.LAZY, cascade=CascadeType.ALL)
List<StaffRecord> staffRecords;
@JsonIgnore
@JoinColumn(name = "user_group_id")
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Groups userGroupId;
}
class RecordType{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "record_type_id")
private int recordTypeId;
// No Mapping
}
虽然创建删除更新让我遇到问题我读了许多关于映射什么没有运气的文章。我正在调用一个RestController。 CURD和传球
提醒
作为参数。我将创建一个RequestModel并使用getter setter,但我想用映射来完成它。
我通过以下更改解决了这个问题:
在Reminder
类中,不需要映射将映射移动到相应的类。
在Staff_Record
班,cascade= CascadeType.ALL
是工作人员和record_Type
映射所必需的
在Staff
类中,staffRecords
不是必需的,因为我们已经在Staff
类中映射它们。
希望这会有助于其他人。