休眠 - 复合键

时间:2016-03-21 19:58:33

标签: hibernate database-design

我的实体班using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Net.Mail; using System.Net; using System.Data; using System.Collections; namespace WebApplication1 { public partial class WebForm1 : System.Web.UI.Page { public DataTable MyDT = new DataTable(); protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { DataTable MyDT = (DataTable)Session["MyDT"]; rptrData.DataSource = MyDT; rptrData.DataBind(); } } protected void btnAdd_Click(object sender, EventArgs e) { //DataTable MyDT = new DataTable(); MyDT.Columns.Add("Name"); MyDT.Columns.Add("Address"); MyDT.Columns.Add("Email"); MyDT.Columns.Add("Info"); string Name = txtName.Text; string Address = txtAddress.Text; string Email = txtEmail.Text; string Info = txtInfo.Text; DataRow dtRow = MyDT.NewRow(); dtRow["Name"] = Name; dtRow["Address"] = Address; dtRow["Email"] = Email; dtRow["Info"] = Info; Session.Add("MyDT", MyDT); } } } 有2个自然键:MemberDispatchMembersDispatchMembers都是实体类本身。

目前,Dispatch的关键是MemberDispatch - 代理密钥。 IDMembersDispatch中作为实体字段组成 并不是关键的一部分。

每当我需要保存和不更新时,即只保存相应的保存 (MemberDispatchMembers)在Dispatch中不存在,我是第一个上午 从MemberDispatch获取(如果存在) 与(MemberDispatchMembers)对匹配的记录,并保存 如果该查询返回null,则为ony。

如果我改为定义并使用自然键(DispatchMembers) 作为密钥,我可以直接保存,而无需先检查已存在的记录。有了这个, 我已经实现了我所寻求的目标 - Hibernate将确保数据库表中(DispatchMembers)对的唯一性。

我见过Why are composite keys discouraged in hibernate?和其他一些人 Hibernate中针对复合键的参数。

我的问题是:有没有更好的方法来设计实体类而无需进入复合键?

// -------------------------

编辑:

我通过覆盖Dispatchequals()字段MemberDispatch上的Members来实现。当我尝试保存现有(Dispatchorg.hibernate.exception.ConstraintViolationException)对时,它会抛出Members

那么Q将是 - 为什么我需要JPA唯一性限制(感谢JBNizet和Nathan Hughes),而我有这个?

0 个答案:

没有答案