Java/Hibernate/Class Hiearchy Mapping

Материал из Java эксперт
Перейти к: навигация, поиск

Class Hierachy Mapping Table Per Class

   <source lang="java">

///////////////////////////////////////////////////////////////////////// <?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">

<hibernate-mapping>

   <class name="Book" table="cd" discriminator-value="cd">
   <id name="id" type="integer"  unsaved-value="0">
     <generator class="increment"/>
   </id>
   <discriminator column="cd_type" type= "string"/>
   <property name="title"/>
   <property name="artist"/>
   <property name="purchasedate" type="date"/>
   <property name="cost" type="double"/>
   <subclass name="SpecialEditionBook" discriminator-value="SpecialEditionBook">
   <property name="newfeatures" type="string"/>
   </subclass>
   <subclass name="InternationalBook"
           discriminator-value="InternationalBook">
   <property name="languages"/>
   <property name="region"/>
   </subclass>
   </class>
 </hibernate-mapping>

///////////////////////////////////////////////////////////////////////// import java.io.*; import java.util.*;

 public class Book {
   int id;
   String title; 
   String artist;
   Date  purchaseDate; 
   double cost;
   public Book() {
   }
   public Book(String title, String artist, Date purchaseDate, double cost) {
     this.title = title;
     this.artist = artist;
     this.purchaseDate = purchaseDate;
     this.cost = cost;
   }
   public void setId(int id) { 
     this.id = id;
   }
   public int getId(){ 
     return id;
   }
   public void setTitle(String title) { 
     this.title = title;
   }
   public String getTitle() { 
     return title;
   }
   public void setArtist(String artist) { 
      this.artist = artist;
   }
   public String getArtist() { 
     return artist;
   }
   public void setPurchasedate(Date purchaseDate) { 
     this.purchaseDate = purchaseDate;
   }
   public Date getPurchasedate() { 
     return purchaseDate;
   }
   public void setCost(double cost) { 
     this.cost = cost;
   }
   public double getCost() { 
     return cost;
   }
 }

///////////////////////////////////////////////////////////////////////// <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC

   "-//Hibernate/Hibernate Configuration DTD//EN"
   "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

   <session-factory>
       
       <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
       <property name="connection.url">jdbc:hsqldb:data/tutorial</property>
       <property name="connection.username">sa</property>
       <property name="connection.password"></property>
       
       <property name="connection.pool_size">1</property>
       
       <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
       
       <property name="show_sql">true</property>
       
       <mapping resource="Book.hbm.xml"/>
   </session-factory>

</hibernate-configuration> ///////////////////////////////////////////////////////////////////////// import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil {

   public static final SessionFactory sessionFactory;
   static {
       try {
           // Create the SessionFactory from hibernate.cfg.xml
           sessionFactory = new Configuration().configure().buildSessionFactory();
       } catch (Throwable ex) {
           // Make sure you log the exception, as it might be swallowed
           System.err.println("Initial SessionFactory creation failed." + ex);
           throw new ExceptionInInitializerError(ex);
       }
   }
   public static final ThreadLocal session = new ThreadLocal();
   public static Session currentSession() throws HibernateException {
       Session s = (Session) session.get();
       // Open a new Session, if this thread has none yet
       if (s == null) {
           s = sessionFactory.openSession();
           // Store it in the ThreadLocal variable
           session.set(s);
       }
       return s;
   }
   public static void closeSession() throws HibernateException {
       Session s = (Session) session.get();
       if (s != null)
           s.close();
       session.set(null);
   }
   
   static Connection conn; 
   static Statement st;
 public static void setup(String sql) {
   try {
     // Step 1: Load the JDBC driver.
     Class.forName("org.hsqldb.jdbcDriver");
     System.out.println("Driver Loaded.");
     // Step 2: Establish the connection to the database.
     String url = "jdbc:hsqldb:data/tutorial";
     conn = DriverManager.getConnection(url, "sa", "");
     System.out.println("Got Connection.");
     st = conn.createStatement();
     st.executeUpdate(sql);
   } catch (Exception e) {
     System.err.println("Got an exception! ");
     e.printStackTrace();
     System.exit(0);
   }
 }
 public static void checkData(String sql) {
   try {
     HibernateUtil.outputResultSet(st
         .executeQuery(sql));

// conn.close();

   } catch (Exception e) {
     e.printStackTrace();
   }
 }
   public static void outputResultSet(ResultSet rs) throws Exception{
   ResultSetMetaData metadata = rs.getMetaData();
   int numcols = metadata.getColumnCount();
   String[] labels = new String[numcols]; 
   int[] colwidths = new int[numcols];
   int[] colpos = new int[numcols];
   int linewidth;
     for (int i = 0; i < numcols; i++) {
       labels[i] = metadata.getColumnLabel(i + 1); // get its label
       System.out.print(labels[i]+"  ");
   }
     System.out.println("------------------------");
   while (rs.next()) {
       for (int i = 0; i < numcols; i++) {
       Object value = rs.getObject(i + 1);
       if(value == null){
           System.out.print("       ");
       }else{
           System.out.print(value.toString().trim()+"   ");
       }
       
     }
       System.out.println("       ");
   }
   }

}

/////////////////////////////////////////////////////////////////////////

import java.util.*; public class InternationalBook extends Book {

 private String languages; 
 private int region;
 
 public InternationalBook() {
 }
 public InternationalBook(String title, String artist, Date purchaseDate, double cost, String language, int region) {
   super(title, artist, purchaseDate, cost);
   languages = language;
   this.region = region;
 }
 public void setLanguages(String s) {
   languages = s;
 }
 public String getLanguages() {
   return languages;
 }
 public void setRegion(int i) {
   region = i;
 }
 public int getRegion() {
   return region;
 }

}

///////////////////////////////////////////////////////////////////////// log4j.rootCategory=WARN, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n log4j.appender.stdout.Target=System.out

///////////////////////////////////////////////////////////////////////// import java.io.Serializable; import java.util.*; import org.hibernate.*; import org.hibernate.cfg.*; import org.hibernate.criterion.*; import org.hibernate.event.*; import org.hibernate.event.def.*; public class Main {

  public static void main(String[] args) throws Exception {
     HibernateUtil.setup("create table cd(id int,title varchar,artist varchar,purchasedate date,cost double,newfeatures varchar,languages varchar,region int,cd_type varchar);");    
     Session session = HibernateUtil.currentSession();
     Book cd = new Book("Book", "R", new Date(), 9.99);
     SpecialEditionBook secd = new SpecialEditionBook("sBook", "R", new Date(), 9.99, "W");
     InternationalBook icd = new InternationalBook("IBook", "R", new Date(), 9.99, "S", 4);
     session.save(cd);
     session.save(secd);
     session.save(icd);
     session.flush();      
     session.close();
    HibernateUtil.checkData("select * from cd");
  }

}

///////////////////////////////////////////////////////////////////////// import java.util.*; public class SpecialEditionBook extends Book {

 private String newfeatures;
 
 public SpecialEditionBook() {
 }
   public SpecialEditionBook(String title, String artist, Date purchaseDate, double cost, String features) {
     super(title, artist, purchaseDate, cost);
     newfeatures = features;
   }
 public void setNewfeatures(String s) {
   newfeatures = s;
 }
 public String getNewfeatures() {
   return newfeatures;
 }

}

      </source>
   
  
 
  



Class Hierarchy Mapping Table Per Concrete Class

   <source lang="java">

///////////////////////////////////////////////////////////////////////// import java.io.*; import java.util.*;

 public class Book {
   int id;
   String title; 
   String artist;
   Date  purchaseDate; 
   double cost;
   public Book() {
   }
   public Book(String title, String artist, Date purchaseDate, double cost) {
     this.title = title;
     this.artist = artist;
     this.purchaseDate = purchaseDate;
     this.cost = cost;
   }
   public void setId(int id) { 
     this.id = id;
   }
   public int getId(){ 
     return id;
   }
   public void setTitle(String title) { 
     this.title = title;
   }
   public String getTitle() { 
     return title;
   }
   public void setArtist(String artist) { 
      this.artist = artist;
   }
   public String getArtist() { 
     return artist;
   }
   public void setPurchasedate(Date purchaseDate) { 
     this.purchaseDate = purchaseDate;
   }
   public Date getPurchasedate() { 
     return purchaseDate;
   }
   public void setCost(double cost) { 
     this.cost = cost;
   }
   public double getCost() { 
     return cost;
   }
 }

///////////////////////////////////////////////////////////////////////// <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC

   "-//Hibernate/Hibernate Configuration DTD//EN"
   "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

   <session-factory>
       
       <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
       <property name="connection.url">jdbc:hsqldb:data/tutorial</property>
       <property name="connection.username">sa</property>
       <property name="connection.password"></property>
       
       <property name="connection.pool_size">1</property>
       
       <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
       
       <property name="show_sql">true</property>
       
       <mapping resource="Book.hbm.xml"/>
   </session-factory>

</hibernate-configuration>

///////////////////////////////////////////////////////////////////////// import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil {

   public static final SessionFactory sessionFactory;
   static {
       try {
           // Create the SessionFactory from hibernate.cfg.xml
           sessionFactory = new Configuration().configure().buildSessionFactory();
       } catch (Throwable ex) {
           // Make sure you log the exception, as it might be swallowed
           System.err.println("Initial SessionFactory creation failed." + ex);
           throw new ExceptionInInitializerError(ex);
       }
   }
   public static final ThreadLocal session = new ThreadLocal();
   public static Session currentSession() throws HibernateException {
       Session s = (Session) session.get();
       // Open a new Session, if this thread has none yet
       if (s == null) {
           s = sessionFactory.openSession();
           // Store it in the ThreadLocal variable
           session.set(s);
       }
       return s;
   }
   public static void closeSession() throws HibernateException {
       Session s = (Session) session.get();
       if (s != null)
           s.close();
       session.set(null);
   }
   
   static Connection conn; 
   static Statement st;
 public static void setup(String sql) {
   try {
     // Step 1: Load the JDBC driver.
     Class.forName("org.hsqldb.jdbcDriver");
     System.out.println("Driver Loaded.");
     // Step 2: Establish the connection to the database.
     String url = "jdbc:hsqldb:data/tutorial";
     conn = DriverManager.getConnection(url, "sa", "");
     System.out.println("Got Connection.");
     st = conn.createStatement();
     st.executeUpdate(sql);
   } catch (Exception e) {
     System.err.println("Got an exception! ");
     e.printStackTrace();
     System.exit(0);
   }
 }
 public static void checkData(String sql) {
   try {
     HibernateUtil.outputResultSet(st
         .executeQuery(sql));

// conn.close();

   } catch (Exception e) {
     e.printStackTrace();
   }
 }
   public static void outputResultSet(ResultSet rs) throws Exception{
   ResultSetMetaData metadata = rs.getMetaData();
   int numcols = metadata.getColumnCount();
   String[] labels = new String[numcols]; 
   int[] colwidths = new int[numcols];
   int[] colpos = new int[numcols];
   int linewidth;
     for (int i = 0; i < numcols; i++) {
       labels[i] = metadata.getColumnLabel(i + 1); // get its label
       System.out.print(labels[i]+"  ");
   }
     System.out.println("------------------------");
   while (rs.next()) {
       for (int i = 0; i < numcols; i++) {
       Object value = rs.getObject(i + 1);
       if(value == null){
           System.out.print("       ");
       }else{
           System.out.print(value.toString().trim()+"   ");
       }
       
     }
       System.out.println("       ");
   }
   }

}

///////////////////////////////////////////////////////////////////////// import java.util.*; public class InternationalBook extends Book {

 private String languages; 
 private int region;
 
 public InternationalBook() {
 }
 public InternationalBook(String title, String artist, Date purchaseDate, double cost, String language, int region) {
   super(title, artist, purchaseDate, cost);
   languages = language;
   this.region = region;
 }
 public void setLanguages(String s) {
   languages = s;
 }
 public String getLanguages() {
   return languages;
 }
 public void setRegion(int i) {
   region = i;
 }
 public int getRegion() {
   return region;
 }

}

/////////////////////////////////////////////////////////////////////////

import java.io.Serializable; import java.util.*; import org.hibernate.*; import org.hibernate.cfg.*; import org.hibernate.criterion.*; import org.hibernate.event.*; import org.hibernate.event.def.*; public class Main {

  public static void main(String[] args) throws Exception {
     HibernateUtil.setup("create table cd(id int,title varchar,artist varchar,purchasedate date,cost double);");    
     HibernateUtil.setup("create table secd(id int,title varchar,artist varchar,purchasedate date,cost double,newfeatures varchar);");    
     HibernateUtil.setup("create table icd(id int,title varchar,artist varchar,purchasedate date,cost double,languages varchar,region int);");    
     Session session = HibernateUtil.currentSession();
     Book cd = new Book("Book", "R", new Date(), 9.99);
     SpecialEditionBook secd = new SpecialEditionBook("sBook", "R", new Date(), 9.99, "W");
     InternationalBook icd = new InternationalBook("IBook", "R", new Date(), 9.99, "S", 4);
     session.save(cd);
     session.save(secd);
     session.save(icd);
     session.flush();      
     session.close();
    HibernateUtil.checkData("select * from cd");
    HibernateUtil.checkData("select * from secd");
    HibernateUtil.checkData("select * from icd");
  }

}

///////////////////////////////////////////////////////////////////////// import java.util.*; public class SpecialEditionBook extends Book {

 private String newfeatures;
 
 public SpecialEditionBook() {
 }
   public SpecialEditionBook(String title, String artist, Date purchaseDate, double cost, String features) {
     super(title, artist, purchaseDate, cost);
     newfeatures = features;
   }
 public void setNewfeatures(String s) {
   newfeatures = s;
 }
 public String getNewfeatures() {
   return newfeatures;
 }

}

///////////////////////////////////////////////////////////////////////// <?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">

<hibernate-mapping>

   <class name="Book" table="cd" discriminator-value="cd"> 
       <id name="id" type="integer" unsaved-value="0">
           <generator  class="increment"/>
       </id>
       <property name="title"/>
       <property name="artist"/>
       <property name="purchasedate" type="date"/> 
       <property name="cost" type="double"/> 
   </class>
   
   <class  name="SpecialEditionBook" table="secd">
       <id name="id" type="integer" unsaved-value="0">
           <generator  class="increment"/>
       </id>
       <property name="title"/>
       <property name="artist"/>
       <property name="purchasedate" type="date"/> 
       <property name="cost" type="double"/> 
       <property name="newfeatures" type="string"/>
   </class>
   
   <class  name="InternationalBook" table="icd">
       <id name="id" type="integer" unsaved-value="0">
           <generator  class="increment"/>
       </id>
       <property name="title"/>
       <property name="artist"/>
       <property name="purchasedate" type="date"/> 
       <property name="cost" type="double"/> 
       <property name="languages"/>
       <property name="region"/>
   </class> 

</hibernate-mapping>

/////////////////////////////////////////////////////////////////////////

      </source>
   
  
 
  



ClassHierchy Mapping Table Per Sub class

   <source lang="java">

///////////////////////////////////////////////////////////////////////// <?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">

<hibernate-mapping>

<class name="Book"
        table="cd">
    <id name="id"
        type="integer"
        unsaved-value="0">
      <generator class="increment"/>
    </id>
 <property name="title"/>
        <property name="artist"/>
        <property name="purchasedate" type="date"/>
        <property name="cost" type="double"/>
 <joined-subclass name="SpecialEditionBook"
                  table="secd">
   <key column="id"/>
   <property name="newfeatures" type="string"/>
 </joined-subclass>
 <joined-subclass name="InternationalBook"
                  table="icd">
   <key column="id"/>
   <property name="languages"/>
   <property name="region"/>
 </joined-subclass>
 </class>

</hibernate-mapping>


///////////////////////////////////////////////////////////////////////// import java.io.*; import java.util.*;

 public class Book {
   int id;
   String title; 
   String artist;
   Date  purchaseDate; 
   double cost;
   public Book() {
   }
   public Book(String title, String artist, Date purchaseDate, double cost) {
     this.title = title;
     this.artist = artist;
     this.purchaseDate = purchaseDate;
     this.cost = cost;
   }
   public void setId(int id) { 
     this.id = id;
   }
   public int getId(){ 
     return id;
   }
   public void setTitle(String title) { 
     this.title = title;
   }
   public String getTitle() { 
     return title;
   }
   public void setArtist(String artist) { 
      this.artist = artist;
   }
   public String getArtist() { 
     return artist;
   }
   public void setPurchasedate(Date purchaseDate) { 
     this.purchaseDate = purchaseDate;
   }
   public Date getPurchasedate() { 
     return purchaseDate;
   }
   public void setCost(double cost) { 
     this.cost = cost;
   }
   public double getCost() { 
     return cost;
   }
 }

///////////////////////////////////////////////////////////////////////// <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC

   "-//Hibernate/Hibernate Configuration DTD//EN"
   "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

   <session-factory>
       
       <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
       <property name="connection.url">jdbc:hsqldb:data/tutorial</property>
       <property name="connection.username">sa</property>
       <property name="connection.password"></property>
       
       <property name="connection.pool_size">1</property>
       
       <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
       
       <property name="show_sql">true</property>
       
       <mapping resource="Book.hbm.xml"/>
   </session-factory>

</hibernate-configuration> ///////////////////////////////////////////////////////////////////////// import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil {

   public static final SessionFactory sessionFactory;
   static {
       try {
           // Create the SessionFactory from hibernate.cfg.xml
           sessionFactory = new Configuration().configure().buildSessionFactory();
       } catch (Throwable ex) {
           // Make sure you log the exception, as it might be swallowed
           System.err.println("Initial SessionFactory creation failed." + ex);
           throw new ExceptionInInitializerError(ex);
       }
   }
   public static final ThreadLocal session = new ThreadLocal();
   public static Session currentSession() throws HibernateException {
       Session s = (Session) session.get();
       // Open a new Session, if this thread has none yet
       if (s == null) {
           s = sessionFactory.openSession();
           // Store it in the ThreadLocal variable
           session.set(s);
       }
       return s;
   }
   public static void closeSession() throws HibernateException {
       Session s = (Session) session.get();
       if (s != null)
           s.close();
       session.set(null);
   }
   
   static Connection conn; 
   static Statement st;
 public static void setup(String sql) {
   try {
     // Step 1: Load the JDBC driver.
     Class.forName("org.hsqldb.jdbcDriver");
     System.out.println("Driver Loaded.");
     // Step 2: Establish the connection to the database.
     String url = "jdbc:hsqldb:data/tutorial";
     conn = DriverManager.getConnection(url, "sa", "");
     System.out.println("Got Connection.");
     st = conn.createStatement();
     st.executeUpdate(sql);
   } catch (Exception e) {
     System.err.println("Got an exception! ");
     e.printStackTrace();
     System.exit(0);
   }
 }
 public static void checkData(String sql) {
   try {
     HibernateUtil.outputResultSet(st
         .executeQuery(sql));

// conn.close();

   } catch (Exception e) {
     e.printStackTrace();
   }
 }
   public static void outputResultSet(ResultSet rs) throws Exception{
   ResultSetMetaData metadata = rs.getMetaData();
   int numcols = metadata.getColumnCount();
   String[] labels = new String[numcols]; 
   int[] colwidths = new int[numcols];
   int[] colpos = new int[numcols];
   int linewidth;
     for (int i = 0; i < numcols; i++) {
       labels[i] = metadata.getColumnLabel(i + 1); // get its label
       System.out.print(labels[i]+"  ");
   }
     System.out.println("------------------------");
   while (rs.next()) {
       for (int i = 0; i < numcols; i++) {
       Object value = rs.getObject(i + 1);
       if(value == null){
           System.out.print("       ");
       }else{
           System.out.print(value.toString().trim()+"   ");
       }
       
     }
       System.out.println("       ");
   }
   }

}

/////////////////////////////////////////////////////////////////////////

import java.util.*; public class InternationalBook extends Book {

 private String languages; 
 private int region;
 
 public InternationalBook() {
 }
 public InternationalBook(String title, String artist, Date purchaseDate, double cost, String language, int region) {
   super(title, artist, purchaseDate, cost);
   languages = language;
   this.region = region;
 }
 public void setLanguages(String s) {
   languages = s;
 }
 public String getLanguages() {
   return languages;
 }
 public void setRegion(int i) {
   region = i;
 }
 public int getRegion() {
   return region;
 }

}

///////////////////////////////////////////////////////////////////////// log4j.rootCategory=WARN, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n log4j.appender.stdout.Target=System.out

///////////////////////////////////////////////////////////////////////// import java.io.Serializable; import java.util.*; import org.hibernate.*; import org.hibernate.cfg.*; import org.hibernate.criterion.*; import org.hibernate.event.*; import org.hibernate.event.def.*; public class Main {

  public static void main(String[] args) throws Exception {
     HibernateUtil.setup("create table cd(id int,title varchar,artist varchar,purchasedate date,cost double);");    
     HibernateUtil.setup("create table secd(id int,newfeatures varchar);");    
     HibernateUtil.setup("create table icd(id int,languages varchar,region int);");    
     Session session = HibernateUtil.currentSession();
     Book cd = new Book("Book", "R", new Date(), 9.99);
     SpecialEditionBook secd = new SpecialEditionBook("sBook", "R", new Date(), 9.99, "W");
     InternationalBook icd = new InternationalBook("IBook", "R", new Date(), 9.99, "S", 4);
     session.save(cd);
     session.save(secd);
     session.save(icd);
     session.flush();      
     session.close();
    HibernateUtil.checkData("select * from cd");
  }

}

///////////////////////////////////////////////////////////////////////// import java.util.*; public class SpecialEditionBook extends Book {

 private String newfeatures;
 
 public SpecialEditionBook() {
 }
   public SpecialEditionBook(String title, String artist, Date purchaseDate, double cost, String features) {
     super(title, artist, purchaseDate, cost);
     newfeatures = features;
   }
 public void setNewfeatures(String s) {
   newfeatures = s;
 }
 public String getNewfeatures() {
   return newfeatures;
 }

}

      </source>