我的实体班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个自然键:MemberDispatch
和Members
。
Dispatch
和Members
都是实体类本身。
目前,Dispatch
的关键是MemberDispatch
- 代理密钥。
ID
和Members
在Dispatch
中作为实体字段组成
并不是关键的一部分。
每当我需要保存和不更新时,即只保存相应的保存
(MemberDispatch
,Members
)在Dispatch
中不存在,我是第一个上午
从MemberDispatch
获取(如果存在)
与(MemberDispatch
,Members
)对匹配的记录,并保存
如果该查询返回null,则为ony。
如果我改为定义并使用自然键(Dispatch
和Members
)
作为密钥,我可以直接保存,而无需先检查已存在的记录。有了这个,
我已经实现了我所寻求的目标 -
Hibernate将确保数据库表中(Dispatch
和Members
)对的唯一性。
我见过Why are composite keys discouraged in hibernate?和其他一些人 Hibernate中针对复合键的参数。
我的问题是:有没有更好的方法来设计实体类而无需进入复合键?
// -------------------------
编辑:
我通过覆盖Dispatch
和equals()
字段MemberDispatch
上的Members
来实现。当我尝试保存现有(Dispatch
,org.hibernate.exception.ConstraintViolationException
)对时,它会抛出Members
。
那么Q将是 - 为什么我需要JPA唯一性限制(感谢JBNizet和Nathan Hughes),而我有这个?