java程序:
Account.java
package test;
import java.util.Set;
public class Account {
int aid;
String name = null;
String password = null;
Set email_Adr;
/**
* @return Returns the name.
*/
public String getName() {
return name;
}
/**
* @param name
* The name to set.
*/
public void setName(String name) {
this.name = name;
}
/**
* @return Returns the password.
*/
public String getPassword() {
return password;
}
/**
* @param password
* The password to set.
*/
public void setPassword(String password) {
this.password = password;
}
public int getAid() {
return aid;
}
public void setAid(int id) {
this.aid = id;
}
public Set getEmail_Adr() {
return email_Adr;
}
public void setEmail_Adr(Set email) {
this.email_Adr = email;
}
}
Email_Adr.java
package test;
import java.util.HashSet;
import java.util.Set;
public class Email_Adr {
int eid;
String emailAdrr;
Account account;
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
public int getEid() {
return eid;
}
public void setEid(int id) {
this.eid = id;
}
public String getEmailAdrr() {
return emailAdrr;
}
public void setEmailAdrr(String emailAdrr) {
this.emailAdrr = emailAdrr;
}
}
数据库描述:
CREATE TABLE account
(aid
int(6) unsigned NOT NULL auto_increment,name
char(10) default NULL,password
char(10) default NULL,
PRIMARY KEY (aid
)
) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=gbk;
CREATE TABLE email_adr
(eid
int(6) unsigned NOT NULL auto_increment,emailAdrr
varchar(20) default NULL,aaid
tinyint(4) default NULL,
PRIMARY KEY (eid
)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;
配置文件:
Account.hbm.xml
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<class name="test.Account" table="account">
<id name="aid" column="aid">
<generator class="assigned" />
</id>
<property name="name" />
<property name="password" />
<set name="Email_Adr" table="email_adr" lazy="true"
cascade="all" inverse="true">
<key column="aaid" ></key>
<one-to-many class="test.Email_Adr" />
</set>
</class>
Email:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<class name="test.Email_Adr" table="email_adr">
<id name="eid" column="eid">
<generator class="assigned" />
</id>
<many-to-one name="Account" column="aaid" class="test.Account" cascade="all" ></many-to-one>
<property name="emailAdrr" />
</class>
测试程序:
package test;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import java.util.Set;
import java.util.HashSet;
import java.sql.*;
import java.util.List;
import java.util.Iterator;
public class TestOneToMany
{
SessionFactory sf;
Session session;
public TestOneToMany ()
{
try
{
Configuration cfg = new Configuration ();
sf = cfg.configure ().buildSessionFactory ();
} catch (HibernateException ex)
{
ex.printStackTrace ();
}
}
public void doCreate ()
{
try
{
session = sf.openSession ();
Transaction tx = session.beginTransaction ();
// Account acnt = new Account();
// Query query = session.createQuery("from Account where name=
// :name");
// query.setString("name", "gao");
// acnt = (Account) query.list().get(0);
// Email_Adr email = new Email_Adr();
// email.setEmailAdrr("sealjifeng@168.com");
Account account = new Account ();
account.setName ("abcd");
account.setPassword ("22");
Set emailSet = new HashSet ();
Email_Adr email = new Email_Adr ();
email.setEmailAdrr ("sealjifeng@168.com");
email.setAccount(account);
emailSet.add (email);
account.setEmail_Adr (emailSet);
session.save (account);
//session.save (email);
// account.setEmail_Adr(emailSet);
// account.getEmail_Adr().add(email);
// //session.save(account);
// acnt.setEmail_Adr(emailSet);
// session.save(acnt);
tx.commit ();
session.close ();
} catch (HibernateException ex)
{
ex.printStackTrace ();
}
}
public void doQuery ()
{
try
{
session = sf.openSession ();
Query q = session.createQuery ("from Account");
List l = q.list ();
Account a = null;
Email_Adr eml = null;
for (int i = 0; i < l.size (); i++)
{
a = (Account) l.get (i);
System.out.println ("姓名: " + a.getName ());
System.out.println ("密码: " + a.getPassword ());
System.out.print ("所有的email:");
Iterator it = a.getEmail_Adr ().iterator ();
while (it.hasNext ())
{
eml = (Email_Adr) it.next ();
System.out.print (eml.getEmailAdrr () + " ");
}
System.out.println ();
}
} catch (HibernateException ex)
{
ex.printStackTrace ();
} finally
{
try
{
session.close ();
} catch (HibernateException ex2)
{
}
}
}
public static void main (String[] args)
{
TestOneToMany t = new TestOneToMany ();
//t.doCreate ();
t.doQuery();
}
}
Query可以,但是crete怎么弄也不行。求解