您的位置:首页 > 其它

Hibernate逍遥游记-第12章 映射值类型集合-003映射List(<list-index>)

2016-03-20 20:29 399 查看
1.

<?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="mypack.Monkey" table="MONKEYS" >
<id name="id" type="long" column="ID">
<generator class="increment"/>
</id>

<property name="name" type="string" >
<column name="NAME" length="15" />
</property>

<property name="age" type="int" >
<column name="AGE" />
</property>

<list   name="images"   table="IMAGES"    lazy="true">
<key column="MONKEY_ID" />
<list-index column="POSITION" />
<element column="FILENAME" type="string"  not-null="true"/>
</list>

</class>

</hibernate-mapping>


2.

package mypack;

import java.io.Serializable;
import java.util.List;
import java.util.ArrayList;

public class Monkey implements Serializable {
private Long id;
private String name;
private int age;
private List images=new ArrayList();

/** full constructor */
public Monkey(String name, int age,List images) {
this.name = name;
this.age=age;
this.images = images;
}

/** default constructor */
public Monkey() {
}

/** minimal constructor */
public Monkey(List images) {
this.images = images;
}

public Long getId() {
return this.id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return this.age;
}

public void setAge(int age) {
this.age = age;
}

public List getImages() {
return this.images;
}

public void setImages(List images) {
this.images = images;
}

}


3.

package mypack;

import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import java.util.*;
import java.sql.*;

public class BusinessService{
public static SessionFactory sessionFactory;
static{
try{
Configuration config = new Configuration().configure();
sessionFactory = config.buildSessionFactory();
}catch(RuntimeException e){e.printStackTrace();throw e;}

}

public void saveMonkey(Monkey monkey){
Session session = sessionFactory.openSession();
Transaction tx = null;
List results=new ArrayList();
try {
tx = session.beginTransaction();
session.save(monkey);
tx.commit();
}catch (RuntimeException e) {
if (tx != null) {
tx.rollback();
}
throw e;
} finally {
session.close();
}
}

public Monkey loadMonkey(long id){
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Monkey monkey=(Monkey)session.get(Monkey.class,new Long(id));
Hibernate.initialize(monkey.getImages());
tx.commit();
return monkey;
}catch (RuntimeException e) {
if (tx != null) {
tx.rollback();
}
throw e;
} finally {
session.close();
}
}

public void test(){
List images=new ArrayList();
images.add("image1.jpg");
images.add("image4.jpg");
images.add("image2.jpg");
images.add("image2.jpg");
images.add("image5.jpg");

Monkey monkey=new Monkey("Tom",21,images);
saveMonkey(monkey);

monkey=loadMonkey(1);
printMonkey(monkey);

}

private void printMonkey(Monkey monkey){
System.out.println(monkey.getImages().getClass().getName());
List images=monkey.getImages();
for(int i=images.size()-1;i>=0;i--){
String fileName=(String)images.get(i);
System.out.println(monkey.getName()+" "+fileName);
}
}
public static void main(String args[]){
new BusinessService().test();
sessionFactory.close();
}
}




4.

drop database if exists SAMPLEDB;
create database SAMPLEDB;
use SAMPLEDB;

create table MONKEYS (
ID bigint not null,
NAME varchar(15),
AGE int,
primary key (ID)
);

create table IMAGES(
MONKEY_ID bigint not null,
POSITION int not null,
FILENAME varchar(15) not null,
primary key (MONKEY_ID,POSITION)
);

alter table IMAGES add index IDX_MONKEY(MONKEY_ID), add constraint FK_MONKEY foreign key (MONKEY_ID) references MONKEYS(ID);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: