我尝试在两个表之间创建一对一的关系。
其中之一是Person:
public class Person implements Serializable {
static final long serialVersionUID = 1L;
private long id;
private String _email;
private String _pass;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getEmail() {
return _email;
}
public void set_email(String _email) {
this._email = _email;
}
public String getPass() {
return _pass;
}
public void set_pass(String _pass) {
this._pass = _pass;
}
}
第二个是ReqC2dmRegId表:
public class ReqC2dmRegId implements Serializable {
private static final long serialVersionUID = 1L;
Person person;
String C2dmid;
private long id;
public ReqC2dmRegId(){}
public String getC2dmid() {
return C2dmid;
}
public void setC2dmid(String c2dmid) {
C2dmid = c2dmid;
}
public ReqC2dmRegId(Person person, String C2dmid) {
super();
this.person = person;
this.C2dmid = C2dmid;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
现在,在我的程序中,我总是首先创建Person,并且仅在需要时添加此ReqC2dmRegId。
现在,我想做的就是链接这两个表。我的意思是,当我坚持使用此ReqC2dmRegId(当然,我向ReqC2dmRegId中的人添加了正确的ID)时,我希望我的ReqC2dmRegId用正确的Person ID更新或保存新行。
这些是我的hbm文件:
ReqC2dmRegId.hbm.xml
/p>
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
person
Person.hbm.xml
/p>
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
我究竟做错了什么?
当我尝试运行时:
//this should to update or save the object in DB
public void update (Object query){
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
//em.createNativeQuery(query).executeUpdate();
em.merge(query);
em.flush();
em.getTransaction().commit();
em.close();
}
我得到:
attempted to assign id from null one-to-one property:Person
最后,它应如下所示:
人
**id email _pass**
2 lala@gmail.com 1234
ReqC2dmRegId
**id REQC2DMREGID**
2 ffgghhjj
更新:
在我放弃尝试了解它不起作用的方式之后
我更改了我的ReqC2dmRegId.hbm.xml
看起来像这样(多对一):
而且工作正常,问题是当我尝试修改ReqC2dmRegId表时
使用我的更新方法,它使用相同的personid创建一个now行
id person_id C2dmid
1 3 asd123
2 3 dfvghj
的方式它不更新右行创建一个新的尽管我使“多对一”属性为unique =“ true”?
提前致谢
参考方案
您必须清楚这种关系:是一对一还是多对一?
看起来像是多对一的单向关系。
这是带有注释的示例:
@Entity
@Table(name="PERSON")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String _email;
private String _pass;
//getters and setters
}
和另一类:
@Entity
@Table(name="ReqC2dmRegId")
public class ReqC2dmRegId {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@ManyToOne
@JoinColumn(name = "PERSON_ID")
private Person person;
//getters and setters
}
页面加载而不是提交时发生struts验证 - java
请原谅我;我对Struts有点陌生。我遇到一个问题,即页面加载而不是我实际提交表单时发生了验证。我整天都在论坛上搜寻和搜寻,没有任何运气。我显然做错了一些事情,应该很容易确定,但是我还没有发现问题所在。这是我的struts.xml的片段:
以下的用途是什么:org.springframework.jdbc.core.JdbcTemplate org.springframework.jdbc.datasource.DataSourceTransactionManager org.springframework.jndi.JndiObjectFactoryBean
是否可以在Swing GUI上仅针对特定组件或组件集设置用于Synth外观的文件,而无需为其他任何组件进行更改? java参考方案 是的,有可能。将类型指定为“区域”,将其更改为“名称”,将值更改为由setName(“ componentName”)给定的特定名称;应用程序中的方法。添加这个