这个问题困扰我3天多时间了,现向各路高手求助:两张表建立非主键关联后,需要更新其中一个关联字段的值,但是更新不了,表结构配置、实体及主要代码如下:
表1:
<hibernate-mapping>
<class name="com.tesh.entity.TComOut" table="T_ComOut" schema="dbo" catalog="tesh">
<id name="comOutId" type="java.lang.Integer">
<column name="comOutId" />
<generator class="increment" />
</id>
<property name="comUser" type="java.lang.String">
<column name="comUser" length="50" />
</property>
<many-to-one name="partInfo" class="com.tesh.entity.TPartInfo" fetch="select" property-ref="oderNum">
<column name="partId" length="10" ></column>
</many-to-one>
</class>
</hibernate-mapping>public class TComOut implements java.io.Serializable { // Fields private Integer comOutId;
private String comUser;
private String partId;
private TPartInfo partInfo;
public Integer getComOutId() {
return this.comOutId;
} public void setComOutId(Integer comOutId) {
this.comOutId = comOutId;
}
public String getComUser() {
return this.comUser;
} public void setComUser(String comUser) {
this.comUser = comUser;
}
public String getPartId() {
return this.partId;
} public void setPartId(String partId) {
this.partId = partId;
}
public TPartInfo getPartInfo()
{
return this.partInfo;
}
public void setPartInfo(TPartInfo partInfo)
{
this.partInfo=partInfo;
}
}
表2:
<hibernate-mapping>
<class name="com.tesh.entity.TPartInfo" table="T_PartInfo" schema="dbo" catalog="tesh">
<id name="ptId" type="java.lang.Integer">
<column name="ptId" />
<generator class="increment" />
</id>
<property name="oderNum" type="java.lang.String">
<column name="oderNum" length="50" />
</property>
<!-- <set name="outInfo" table="T_ComOut" inverse="true" cascade="all">
<key>
<column name="partId" length="10" not-null="true"/>
</key>
<one-to-many class="com.tesh.entity.TComOut"/>
</set> 这段代码注释掉也可以,是否相当于“唯一外键关联”?-->
</class>
</hibernate-mapping>public class TPartInfo implements java.io.Serializable { // Fields private Integer ptId;
private String oderNum;
private Set outInfo; public Integer getPtId() {
return this.ptId;
} public void setPtId(Integer ptId) {
this.ptId = ptId;
}
public String getOderNum() {
return this.oderNum;
} public void setOderNum(String oderNum) {
this.oderNum = oderNum;
}
public Set getOutInfo()
{
return this.outInfo;
}
public void setOutInfo(Set outInfo)
{
this.outInfo=outInfo;
}
}
主要功能代码:
TComOut comout = new TComOut();
comout.setComUser(outForm.getComUser());
comout.setPartId(outForm.getPartId()); //这句代码执行不了,就是那个partId字段无法添加数据,其它字段都能正常添加数据实际的需求是TComOut表中的某些记录与TPartInfo不需要建立关联关系(大部分记录是多对一关系),即partId字段与TPartInfo的oderNum不需要对应,而是由用户通过页面表单填写进去的,而现在只有partId字段无法填写数据,其它的正常,请问如何才能更新partID的值,而且希望是直接更新,最好不通过TPartInfo执行,请各路高手指点一下,先谢谢了。
表1:
<hibernate-mapping>
<class name="com.tesh.entity.TComOut" table="T_ComOut" schema="dbo" catalog="tesh">
<id name="comOutId" type="java.lang.Integer">
<column name="comOutId" />
<generator class="increment" />
</id>
<property name="comUser" type="java.lang.String">
<column name="comUser" length="50" />
</property>
<many-to-one name="partInfo" class="com.tesh.entity.TPartInfo" fetch="select" property-ref="oderNum">
<column name="partId" length="10" ></column>
</many-to-one>
</class>
</hibernate-mapping>public class TComOut implements java.io.Serializable { // Fields private Integer comOutId;
private String comUser;
private String partId;
private TPartInfo partInfo;
public Integer getComOutId() {
return this.comOutId;
} public void setComOutId(Integer comOutId) {
this.comOutId = comOutId;
}
public String getComUser() {
return this.comUser;
} public void setComUser(String comUser) {
this.comUser = comUser;
}
public String getPartId() {
return this.partId;
} public void setPartId(String partId) {
this.partId = partId;
}
public TPartInfo getPartInfo()
{
return this.partInfo;
}
public void setPartInfo(TPartInfo partInfo)
{
this.partInfo=partInfo;
}
}
表2:
<hibernate-mapping>
<class name="com.tesh.entity.TPartInfo" table="T_PartInfo" schema="dbo" catalog="tesh">
<id name="ptId" type="java.lang.Integer">
<column name="ptId" />
<generator class="increment" />
</id>
<property name="oderNum" type="java.lang.String">
<column name="oderNum" length="50" />
</property>
<!-- <set name="outInfo" table="T_ComOut" inverse="true" cascade="all">
<key>
<column name="partId" length="10" not-null="true"/>
</key>
<one-to-many class="com.tesh.entity.TComOut"/>
</set> 这段代码注释掉也可以,是否相当于“唯一外键关联”?-->
</class>
</hibernate-mapping>public class TPartInfo implements java.io.Serializable { // Fields private Integer ptId;
private String oderNum;
private Set outInfo; public Integer getPtId() {
return this.ptId;
} public void setPtId(Integer ptId) {
this.ptId = ptId;
}
public String getOderNum() {
return this.oderNum;
} public void setOderNum(String oderNum) {
this.oderNum = oderNum;
}
public Set getOutInfo()
{
return this.outInfo;
}
public void setOutInfo(Set outInfo)
{
this.outInfo=outInfo;
}
}
主要功能代码:
TComOut comout = new TComOut();
comout.setComUser(outForm.getComUser());
comout.setPartId(outForm.getPartId()); //这句代码执行不了,就是那个partId字段无法添加数据,其它字段都能正常添加数据实际的需求是TComOut表中的某些记录与TPartInfo不需要建立关联关系(大部分记录是多对一关系),即partId字段与TPartInfo的oderNum不需要对应,而是由用户通过页面表单填写进去的,而现在只有partId字段无法填写数据,其它的正常,请问如何才能更新partID的值,而且希望是直接更新,最好不通过TPartInfo执行,请各路高手指点一下,先谢谢了。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货