我的代码已经跑通了,但是有一点不太清楚:/*这是 地址实体类*/package my;public class address {
private int id;
private String address;
private int userid;
private user user;
public user getUser() {
return user;
}
public void setUser(user user) {
this.user = user;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}} /*这是用户的实体类*/package my;public class user {
private int id;
private String username;
private java.util.Set addresses;
public java.util.Set getAddresses() {
return addresses;
}
public void setAddresses(java.util.Set addresses) {
this.addresses = addresses;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}/** default constructor */
public user() {
}/** constructor with id */
public user(int id) {
this.id = id;
}}
/*这是用户的类的配置文件*/<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="my.user" table="user"
dynamic-update="true"
dynamic-insert="true"
>
<id name="id" type="integer" column="id" >
<generator class="increment"/>
</id>
<property name="username" type="string" column="name">
</property>
<set name="addresses"
inverse="true"
table="address"
cascade="all"
order-by="id">
<key column="userid"></key>
<one-to-many class="my.address"/>
</set>
</class>
</hibernate-mapping>/*这是地址类的配置文件*/
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="my.address" table="address"
dynamic-update="true"
dynamic-insert="true" >
<id name="id" type="integer" column="id" >
<generator class="increment"/>
</id>
<property name="address" type="string" column="address"/>
<many-to-one name="user"
class="my.user"
cascade="none"
outer-join="auto"
update="true"
insert="true"
access="property"
column="userid"
not-null="true"
/>
</class>
</hibernate-mapping>
public static void main(String[] args) {
// TODO Auto-generated method stub
PropertyConfigurator.configure(myhibernatetest.class
.getResource("log.properties"));
Configuration con=new Configuration().configure();
SessionFactory sessionfac=con.buildSessionFactory();
Session session=con.buildSessionFactory().openSession();
Transaction tran=session.beginTransaction();
/*
* 单向一对多
*
address ad=new address();
address ad2=new address();
address ad3=new address();
user u= new user();
u.setUsername("wwwww");
ad.setAddress("DALIAN");
ad2.setAddress("ddz");
ad3.setAddress("ZHONGSHAN");
HashSet se = new HashSet();
se.add(ad);
se.add(ad2);
se.add(ad3);
u.setAddresses(se);
session.save(u);
*/
/*双向一对多*/
address ad=new address();
address ad2=new address();
user u= new user();
u.setUsername("沟里人");
ad.setAddress("站前街道");
ad.setUser(u);
ad2.setAddress("西山小区");
ad2.setUser(u);
------------------------------
\ HashSet set=new HashSet();\
\ set.add(ad); \
\ set.add(ad2); \
\ u.setAddresses(set); \
------------------------------ 【此处改正後。请问这样写主控是由address 来完成的吗?主控方由哪方来完成如何体现出来的呢?不很清晰】
由于是效仿资料,资料原来的写法:u.getAddresses().add(ad);
u.getAddresses().add(ad2);
会有如下的错误日志
private int id;
private String address;
private int userid;
private user user;
public user getUser() {
return user;
}
public void setUser(user user) {
this.user = user;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}} /*这是用户的实体类*/package my;public class user {
private int id;
private String username;
private java.util.Set addresses;
public java.util.Set getAddresses() {
return addresses;
}
public void setAddresses(java.util.Set addresses) {
this.addresses = addresses;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}/** default constructor */
public user() {
}/** constructor with id */
public user(int id) {
this.id = id;
}}
/*这是用户的类的配置文件*/<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="my.user" table="user"
dynamic-update="true"
dynamic-insert="true"
>
<id name="id" type="integer" column="id" >
<generator class="increment"/>
</id>
<property name="username" type="string" column="name">
</property>
<set name="addresses"
inverse="true"
table="address"
cascade="all"
order-by="id">
<key column="userid"></key>
<one-to-many class="my.address"/>
</set>
</class>
</hibernate-mapping>/*这是地址类的配置文件*/
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="my.address" table="address"
dynamic-update="true"
dynamic-insert="true" >
<id name="id" type="integer" column="id" >
<generator class="increment"/>
</id>
<property name="address" type="string" column="address"/>
<many-to-one name="user"
class="my.user"
cascade="none"
outer-join="auto"
update="true"
insert="true"
access="property"
column="userid"
not-null="true"
/>
</class>
</hibernate-mapping>
public static void main(String[] args) {
// TODO Auto-generated method stub
PropertyConfigurator.configure(myhibernatetest.class
.getResource("log.properties"));
Configuration con=new Configuration().configure();
SessionFactory sessionfac=con.buildSessionFactory();
Session session=con.buildSessionFactory().openSession();
Transaction tran=session.beginTransaction();
/*
* 单向一对多
*
address ad=new address();
address ad2=new address();
address ad3=new address();
user u= new user();
u.setUsername("wwwww");
ad.setAddress("DALIAN");
ad2.setAddress("ddz");
ad3.setAddress("ZHONGSHAN");
HashSet se = new HashSet();
se.add(ad);
se.add(ad2);
se.add(ad3);
u.setAddresses(se);
session.save(u);
*/
/*双向一对多*/
address ad=new address();
address ad2=new address();
user u= new user();
u.setUsername("沟里人");
ad.setAddress("站前街道");
ad.setUser(u);
ad2.setAddress("西山小区");
ad2.setUser(u);
------------------------------
\ HashSet set=new HashSet();\
\ set.add(ad); \
\ set.add(ad2); \
\ u.setAddresses(set); \
------------------------------ 【此处改正後。请问这样写主控是由address 来完成的吗?主控方由哪方来完成如何体现出来的呢?不很清晰】
由于是效仿资料,资料原来的写法:u.getAddresses().add(ad);
u.getAddresses().add(ad2);
会有如下的错误日志
解决方案 »
- MyEclipse 包结构问题
- 一个关于连接数据库的问题 ClassNotFoundException
- 单表多对多关系如何映射?
- 请教 ejb 3 中 一对多的问题
- struts的logic标签的问题
- 思考了几个月的问题。。。。。请来看看
- 用commons-fileupload实现上传的代码的调试。
- 关于Tomcat配置成wap服务器!高手请进:)在线等!
- java servlet的字节码文件究竟要放在Tomcat的哪里才能检测得到?
- jboss-3.0.7_jakarta-tomcat-4.1.24+mysql4.0.14 整合问题!
- 请问学 JAVA 看什么书好
- 在线等~~ 谢谢先~~ 关于域用户验证+JCIFS的问题
你知道这句话什么意思么?
是从数据库中获得你添加进去的ad2
我从上面看不出你什么时候把ad2添加进去了
要知道从session保存到数据库是要commit以后的事情
一对多的话你只+一个也是可以的
不过一般都推荐互相add下,因为关联吗他原来的写法要么本来数据库里面就有东西的吧
DEBUG [main] (JDBCTransaction.java:54) - begin
DEBUG [main] (ConnectionManager.java:415) - opening JDBC connection
DEBUG [main] (DriverManagerConnectionProvider.java:93) - total checked-out connections: 0
Exception in thread "main" java.lang.NullPointerException
at my.myhibernatetest.main(myhibernatetest.java:60) //日志报错
DEBUG [main] (DriverManagerConnectionProvider.java:99) - using pooled JDBC connection, pool size: 0
DEBUG [main] (JDBCTransaction.java:59) - current autocommit status: false
DEBUG [main] (JDBCContext.java:194) - after transaction begin
---------------------------------------------------------------------------------------------------------
session.save(u);
tran.commit();
session.close();
sessionfac.close();}}