From 72a02bc17c1adbd92284fd25afeb3a878d51c2d1 Mon Sep 17 00:00:00 2001
From: Arnaud Jelmoni <arnaud.jelmoni@keyconsulting.fr>
Date: Tue, 5 Jan 2021 09:39:09 +0000
Subject: [PATCH] TANGOARCH-665

---
 configuration/beans.xml                       | 65 ++++----------
 pom.xml                                       | 51 +++++------
 .../snap/api/manager/SnapManagerApi.java      | 84 -------------------
 .../archiving/snap/api/model/Snapshot.java    | 50 +++++++++++
 .../SnapshotPersistenceManager.java           |  2 +
 .../SnapshotPersistenceManagerFactory.java    |  3 +-
 .../SpringSnapshotPersistenceManagerImpl.java |  9 +-
 .../spring/dao/AbstractHibernateDAO.java      | 18 ++++
 .../spring/dao/AbstractHibernateDAOImp.java   | 55 ++++++++++++
 .../spring/dao/AbstractValDAO.java            | 31 +++++--
 .../spring/dao/ClasspathDAOBeansLoader.java   | 22 +++--
 .../spring/dao/DAOBeansLoader.java            |  4 +
 .../persistence/spring/dao/Im1ValDAOImpl.java |  2 +
 .../persistence/spring/dao/Im2ValDAOImpl.java |  2 +
 .../spring/dao/ScNum1ValDAOImpl.java          |  2 +
 .../spring/dao/ScNum2ValDAOImpl.java          |  2 +
 .../spring/dao/ScStr1ValDAOImpl.java          |  2 +
 .../spring/dao/ScStr2ValDAOImpl.java          |  2 +
 .../persistence/spring/dao/SnapshotDAO.java   |  7 ++
 .../spring/dao/SnapshotDAOImp.java            | 13 +++
 .../persistence/spring/dao/Sp1ValDAOImpl.java |  2 +
 .../persistence/spring/dao/Sp2ValDAOImpl.java |  2 +
 .../api/persistence/spring/dao/ValDAO.java    |  2 +
 .../spring/dao/test/AbstractValDAOTest.java   | 60 ++++++-------
 .../dao/test/ClasspathDAOBeansLoaderTest.java | 45 ++++++++++
 .../spring/dao/test/ScNum1ValDAOTest.java     | 27 +++---
 .../spring/dao/test/ScNum2ValDAOTest.java     | 29 ++++---
 .../spring/dao/test/ScStr1ValDAOTest.java     | 28 ++++---
 .../spring/dao/test/ScStr2ValDAOTest.java     | 27 +++---
 .../spring/dao/test/SnapshotDAOTest.java      | 35 ++++++++
 .../spring/dao/test/Sp1ValDAOTest.java        | 29 ++++---
 .../spring/dao/test/Sp2ValDAOTest.java        | 31 ++++---
 src/test/resources/beans.xml                  | 77 +++++++++++++++++
 src/test/resources/valueTables.hbm.xml        | 82 ++++++++++++++++++
 34 files changed, 621 insertions(+), 281 deletions(-)
 create mode 100644 src/main/java/fr/soleil/archiving/snap/api/model/Snapshot.java
 create mode 100644 src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractHibernateDAO.java
 create mode 100644 src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractHibernateDAOImp.java
 create mode 100644 src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/SnapshotDAO.java
 create mode 100644 src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/SnapshotDAOImp.java
 create mode 100644 src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ClasspathDAOBeansLoaderTest.java
 create mode 100644 src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/SnapshotDAOTest.java
 create mode 100644 src/test/resources/beans.xml
 create mode 100644 src/test/resources/valueTables.hbm.xml

diff --git a/configuration/beans.xml b/configuration/beans.xml
index 51f1543..9aabfe2 100644
--- a/configuration/beans.xml
+++ b/configuration/beans.xml
@@ -2,11 +2,12 @@
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
-       xsi:schemaLocation="
-       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
-       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
-       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
-
+       xmlns:context="http://www.springframework.org/schema/context"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
+       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
+       http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd">
+	<context:component-scan base-package="fr.soleil.archiving.snap.api"/>
 	<!-- DATASOURCE DEFINITION VVVVVVV-->
 	<bean id="dataSource"
         class="org.apache.commons.dbcp.BasicDataSource"
@@ -15,15 +16,15 @@
 		    <property name="maxActive" value="4"/>
 		    <property name="maxIdle" value="8"/>
 
-		    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
-		    <property name="url" value="jdbc:mysql://localhost/snap?autoReconnect=true" />
-		    <property name="username" value="snaparchiver" />
-		    <property name="password" value="snaparchiver" />
+		    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
+		    <property name="url" value="jdbc:oracle:thin:@195.221.4.203:1521:TEST11SE" />
+		    <property name="username" value="snap" />
+		    <property name="password" value="snap" />
 	</bean>
   	<!-- DATASOURCE DEFINITION ^^^^^^-->
 	
 	<!-- HIBERNATE DEFINITION VVVVVVV-->
-    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
+    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
 		<property name="dataSource" ref="dataSource"/>
 	
 		<property name="mappingResources">
@@ -31,14 +32,16 @@
 			<value>valueTables.hbm.xml</value>
 		  </list>
 		</property>
+		<property name="packagesToScan" value="fr.soleil.archiving.snap.api.model" />   
 
     	<property name="hibernateProperties">
 		  <value>
-			hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
+			hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
+			hibernate.default_schema=SNAP
 			hibernate.show_sql=true
 			hibernate.format_sql=true
 			hibernate.transaction.factory_class=org.hibernate.transaction.JDBCTransactionFactory
-			hibernate.current_session_context_class=thread
+			hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext
 			hibernate.connection.autocommit=false
 			hibernate.connection.release_mode=after_transaction
 			hibernate.generate_statistics=true
@@ -49,7 +52,7 @@
   
     <!-- TRANSACTIONS DEFINITIONS VVVVVVV-->
 		<!-- MANAGER -->
-		<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
+		<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
 			<property name="sessionFactory" ref="sessionFactory"/>
 		</bean>
 	
@@ -67,38 +70,6 @@
 			<aop:advisor advice-ref="txAdvice" pointcut-ref="valDAOOperation"/>
 		</aop:config>
     <!-- TRANSACTIONS DEFINITIONS ^^^^^^-->
-  
-	<!-- DAO BEANS DEFINITION VVVVVVV-->
-    <bean id="scNum1ValDAO" class="fr.soleil.archiving.snap.api.persistence.spring.dao.ScNum1ValDAOImpl">
-		<constructor-arg ref="sessionFactory" /> 
-    </bean>
-  
-    <bean id="scNum2ValDAO" class="fr.soleil.archiving.snap.api.persistence.spring.dao.ScNum2ValDAOImpl">
-		<constructor-arg ref="sessionFactory" /> 
-    </bean>
-  
-    <bean id="scStr1ValDAO" class="fr.soleil.archiving.snap.api.persistence.spring.dao.ScStr1ValDAOImpl">
-		<constructor-arg ref="sessionFactory" /> 
-    </bean>
-  
-    <bean id="scStr2ValDAO" class="fr.soleil.archiving.snap.api.persistence.spring.dao.ScStr2ValDAOImpl">
-		<constructor-arg ref="sessionFactory" /> 
-    </bean>
-  
-    <bean id="sp1ValDAO" class="fr.soleil.archiving.snap.api.persistence.spring.dao.Sp1ValDAOImpl">
-		<constructor-arg ref="sessionFactory" /> 
-    </bean>
-  
-    <bean id="sp2ValDAO" class="fr.soleil.archiving.snap.api.persistence.spring.dao.Sp2ValDAOImpl">
-		<constructor-arg ref="sessionFactory" /> 
-    </bean>
-  
-    <bean id="im1ValDAO" class="fr.soleil.archiving.snap.api.persistence.spring.dao.Im1ValDAOImpl">
-		<constructor-arg ref="sessionFactory" /> 
-    </bean>
-  
-    <bean id="im2ValDAO" class="fr.soleil.archiving.snap.api.persistence.spring.dao.Im2ValDAOImpl">
-		<constructor-arg ref="sessionFactory" /> 
-    </bean>
-	<!-- DAO BEANS DEFINITION ^^^^^^-->
+
+	
 </beans>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 256e1af..1f8f96c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -77,19 +77,26 @@
       <artifactId>commonArchivingApi</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring</artifactId>
-      <exclusions>
-        <exclusion>
-          <groupId>log4j</groupId>
-          <artifactId>log4j</artifactId>
-        </exclusion>
-        <exclusion>
-          <artifactId>commons-logging</artifactId>
-          <groupId>commons-logging</groupId>
-        </exclusion>
-      </exclusions>
-    </dependency>
+	    <groupId>org.springframework</groupId>
+	    <artifactId>spring-core</artifactId>
+	</dependency>
+    <dependency>
+	    <groupId>org.springframework</groupId>
+	    <artifactId>spring-beans</artifactId>
+	</dependency>
+    <dependency>
+	    <groupId>org.springframework</groupId>
+	    <artifactId>spring-orm</artifactId>
+	</dependency>
+	 <dependency>
+	    <groupId>org.springframework</groupId>
+	    <artifactId>spring-context</artifactId>
+	</dependency>
+	<dependency>
+	    <groupId>org.springframework</groupId>
+	    <artifactId>spring-test</artifactId>
+	    <scope>test</scope>
+	</dependency>
     <dependency>
       <groupId>org.hibernate</groupId>
       <artifactId>hibernate-core</artifactId>
@@ -117,24 +124,8 @@
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
+      <version>4.12</version>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-test</artifactId>
-      <version>2.5.6</version>
-      <scope>test</scope>
-      <exclusions>
-        <exclusion>
-          <groupId>log4j</groupId>
-          <artifactId>log4j</artifactId>
-        </exclusion>
-        <exclusion>
-          <artifactId>commons-logging</artifactId>
-          <groupId>commons-logging</groupId>
-        </exclusion>
-      </exclusions>
-    </dependency>
   </dependencies>
-
 </project>
diff --git a/src/main/java/fr/soleil/archiving/snap/api/manager/SnapManagerApi.java b/src/main/java/fr/soleil/archiving/snap/api/manager/SnapManagerApi.java
index 7a6c709..0df77bc 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/manager/SnapManagerApi.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/manager/SnapManagerApi.java
@@ -319,73 +319,6 @@ public class SnapManagerApi {
         }
     }
 
-    /**
-     * This method checks the registration and create the table of the
-     * attributes in the database
-     * 
-     * @param attributeNameList
-     * @return true if the registration works
-     */
-    /*
-     * private static boolean checkRegistration(String[] attributeNameList)
-     * throws SnapshotingException {
-     * 
-     * for ( int i = 0 ; i < attributeNameList.length ; i++ ) { String
-     * attributeName = attributeNameList[ i ]; try { if (
-     * !isRegistred(attributeName) ) { AttributeInfo attributeInfo =
-     * getAttributeInfo(attributeName); int index =
-     * attributeName.lastIndexOf("/"); String deviceName =
-     * attributeName.substring(0 , index); String[] attributeSplitName =
-     * split_att_name_3_fields(attributeName); java.sql.Timestamp time = new
-     * java.sql.Timestamp(new java.util.Date().getTime()); SnapAttributeHeavy
-     * snapAttributeHeavy = new SnapAttributeHeavy(attributeName);
-     * snapAttributeHeavy.setAttribute_complete_name(attributeName); //
-     * **************** The whole attribute name (device_name + attribute_name)
-     * snapAttributeHeavy.setAttribute_device_name(deviceName);
-     * snapAttributeHeavy.setRegistration_time(time); // ****************
-     * Attribute registration timestamp
-     * snapAttributeHeavy.setDomain(attributeSplitName[ 1 ]); //
-     * **************** domain to which the attribute is associated
-     * snapAttributeHeavy.setFamily(attributeSplitName[ 2 ]); //
-     * **************** family to which the attribute is associated
-     * snapAttributeHeavy.setMember(attributeSplitName[ 3 ]); //
-     * **************** member to which the attribute is associated
-     * snapAttributeHeavy.setAttribute_name(attributeSplitName[ 4 ]); //
-     * **************** attribute name
-     * snapAttributeHeavy.setData_type(attributeInfo.data_type); //
-     * **************** Attribute data type
-     * snapAttributeHeavy.setData_format(attributeInfo.data_format.value()); //
-     * **************** Attribute data format
-     * snapAttributeHeavy.setWritable(attributeInfo.writable.value()); //
-     * **************** Attribute read/write type
-     * snapAttributeHeavy.setMax_dim_x(attributeInfo.max_dim_x); //
-     * **************** Attribute Maximum X dimension
-     * snapAttributeHeavy.setMax_dim_y(attributeInfo.max_dim_y); //
-     * **************** Attribute Maximum Y dimension
-     * snapAttributeHeavy.setLevel(attributeInfo.level.value()); //
-     * **************** Attribute display level
-     * snapAttributeHeavy.setCtrl_sys(attributeSplitName[ 0 ]); //
-     * **************** Control system to which the attribute belongs
-     * snapAttributeHeavy.setArchivable(0); // **************** archivable
-     * (Property that precises whether the attribute is "on-run-only"
-     * archivable, or if it is "always" archivable
-     * snapAttributeHeavy.setSubstitute(0); // **************** substitute
-     * snapAttributeHeavy.setDescription(attributeInfo.description);
-     * snapAttributeHeavy.setLabel(attributeInfo.label);
-     * snapAttributeHeavy.setUnit(attributeInfo.unit);
-     * snapAttributeHeavy.setStandard_unit(attributeInfo.standard_unit);
-     * snapAttributeHeavy.setDisplay_unit(attributeInfo.display_unit);
-     * snapAttributeHeavy.setFormat(attributeInfo.format);
-     * snapAttributeHeavy.setMin_value(attributeInfo.min_value);
-     * snapAttributeHeavy.setMax_value(attributeInfo.max_value);
-     * snapAttributeHeavy.setMin_alarm(attributeInfo.min_alarm);
-     * snapAttributeHeavy.setMax_alarm(attributeInfo.max_alarm);
-     * 
-     * if ( m_snapDataBase == null ) return false; else
-     * m_snapDataBase.registerAttribute(snapAttributeHeavy);
-     * 
-     * } } catch ( SnapshotingException e ) { throw e; } } return true; }
-     */
 
     private static String[] split_att_name_3_fields(String att_name) {
         String host = "";
@@ -467,7 +400,6 @@ public class SnapManagerApi {
             // exactly those defined in the TangoDatabase (to avoid problems of
             // case in hibernate modules)
 
-            // AttributeInfo att_info = attributeGetInfo(att_complete_name);
             final int index = att_complete_name.lastIndexOf("/");
             String device_name = att_complete_name.substring(0, index);
             final DeviceProxy deviceProxy = new DeviceProxy(device_name);
@@ -756,14 +688,6 @@ public class SnapManagerApi {
         final List<SnapAttributeExtract> theoricList = getContextAssociatedAttributes(contextID);
         final List<SnapAttributeExtract> result = new ArrayList<SnapAttributeExtract>(theoricList);
         snapDataBase.getSnapResults(new ArrayList<SnapAttributeExtract>(theoricList), snapshot.getId_snap());
-        // Gets the attributes's values
-        // for (int i = 0; i < theoricList.size(); i++) {
-        // final SnapAttributeExtract snapAttributeLight = theoricList.get(i);
-        // final SnapAttributeExtract snapAttributeExtract =
-        // snapDataBase.getSnapResult(snapAttributeLight,
-        // snapshot.getId_snap());
-        // arrayList.add(snapAttributeExtract);
-        // }
 
         return result;
     }
@@ -831,12 +755,6 @@ public class SnapManagerApi {
         final List<SnapAttributeExtract> theoricList = getContextAssociatedAttributes(contextID);
         final List<SnapAttributeExtract> result = new ArrayList<SnapAttributeExtract>(theoricList);
         snapDataBase.getSnapResults(result, id_snap);
-        // for (int i = 0; i < theoricList.size(); i++) {
-        // final SnapAttributeExtract snapAttributeLight = theoricList.get(i);
-        // final SnapAttributeExtract snapAttributeExtract =
-        // snapDataBase.getSnapResult(snapAttributeLight, id_snap);
-        // arrayList.add(snapAttributeExtract);
-        // }
 
         return result;
     }
@@ -902,7 +820,6 @@ public class SnapManagerApi {
                 throw new SnapshotingException(message, reason, ErrSeverity.PANIC, desc, "");
             }
         } catch (final DevFailed devFailed) {
-            // devFailed.printStackTrace();
             final String message = SnapConst.SNAPSHOTING_ERROR_PREFIX + " : " + SnapConst.DEV_UNREACH_EXCEPTION;
             final String reason = "Failed while executing SnapManagerApi.setEquipmentsWithSnapshot() method...";
             final String desc = "";
@@ -1087,7 +1004,6 @@ public class SnapManagerApi {
                 throw new SnapshotingException(message, reason, ErrSeverity.PANIC, desc, "");
             }
         } catch (final DevFailed devFailed) {
-            // devFailed.printStackTrace();
             final String message = SnapConst.SNAPSHOTING_ERROR_PREFIX + " : " + SnapConst.DEV_UNREACH_EXCEPTION;
             final String reason = "Failed while executing SnapManagerApi.setEquipmentWithCommand() method...";
             final String desc = devFailed.getMessage();
diff --git a/src/main/java/fr/soleil/archiving/snap/api/model/Snapshot.java b/src/main/java/fr/soleil/archiving/snap/api/model/Snapshot.java
new file mode 100644
index 0000000..9c6bc1e
--- /dev/null
+++ b/src/main/java/fr/soleil/archiving/snap/api/model/Snapshot.java
@@ -0,0 +1,50 @@
+package fr.soleil.archiving.snap.api.model;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "SNAPSHOT", schema = "SNAP")
+public class Snapshot implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -5816631000141431971L;
+
+	private int idContext = -1; // Identifier for the related context
+	private int idSnap = -1; // Identifier for this snapshot
+	private java.sql.Timestamp time = null; // Timestamp asociated to this
+	// snapshot
+
+	@Id
+	@Column(name = "ID_SNAP", unique = true, nullable = false, precision = 18, scale = 0)
+	public int getIdSnap() {
+		return idSnap;
+	}
+
+	public void setIdSnap(int id_snap) {
+		this.idSnap = id_snap;
+	}
+
+	@Column(name = "ID_CONTEXT", unique = true, nullable = false, precision = 18, scale = 0)
+	public int getIdContext() {
+		return idContext;
+	}
+
+	public void setIdContext(int id_context) {
+		this.idContext = id_context;
+	}
+
+	@Column(name = "TIME", nullable = false)
+	public java.sql.Timestamp getTime() {
+		return time;
+	}
+
+	public void setTime(java.sql.Timestamp time) {
+		this.time = time;
+	}
+}
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/SnapshotPersistenceManager.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/SnapshotPersistenceManager.java
index 0731361..6f9af66 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/persistence/SnapshotPersistenceManager.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/SnapshotPersistenceManager.java
@@ -4,4 +4,6 @@ import fr.soleil.actiongroup.collectiveaction.onattributes.plugin.persistance.Pe
 
 public interface SnapshotPersistenceManager extends PersistenceManager {
 	public String getResourceName();
+
+	void autowired(Object object);
 }
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/SnapshotPersistenceManagerFactory.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/SnapshotPersistenceManagerFactory.java
index 743af52..eb4bc2e 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/persistence/SnapshotPersistenceManagerFactory.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/SnapshotPersistenceManagerFactory.java
@@ -35,6 +35,7 @@ public class SnapshotPersistenceManagerFactory {
     }
 
     public SnapshotPersistenceManager getManager(String beansFileName, String userName, String password) {
-	return new SpringSnapshotPersistenceManagerImpl(beansFileName, userName, password);
+		return new SpringSnapshotPersistenceManagerImpl(beansFileName, userName, password);
     }
+
 }
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/SpringSnapshotPersistenceManagerImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/SpringSnapshotPersistenceManagerImpl.java
index 0c80aa4..9a4126a 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/persistence/SpringSnapshotPersistenceManagerImpl.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/SpringSnapshotPersistenceManagerImpl.java
@@ -27,7 +27,7 @@ public class SpringSnapshotPersistenceManagerImpl implements SnapshotPersistence
     private final DAOBeansLoader beans;
 
     SpringSnapshotPersistenceManagerImpl(final String beansFileName, final String userName, final String password) {
-	beans = new ClasspathDAOBeansLoader(beansFileName, userName, password);
+		beans = new ClasspathDAOBeansLoader(beansFileName, userName, password);
     }
 
     @Override
@@ -76,6 +76,11 @@ public class SpringSnapshotPersistenceManagerImpl implements SnapshotPersistence
      */
     @Override
     public String getResourceName() {
-	return beans.getResourceName();
+		return beans.getResourceName();
+	}
+
+	@Override
+	public void autowired(Object object) {
+		beans.getApplicationContext().getAutowireCapableBeanFactory().autowireBean(object);
     }
 }
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractHibernateDAO.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractHibernateDAO.java
new file mode 100644
index 0000000..0c88230
--- /dev/null
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractHibernateDAO.java
@@ -0,0 +1,18 @@
+package fr.soleil.archiving.snap.api.persistence.spring.dao;
+
+import java.io.Serializable;
+import java.util.List;
+
+public interface AbstractHibernateDAO<T extends Serializable> {
+	public T findOne(int id);
+
+	public List<T> findAll();
+
+	public void save(T entity);
+
+	public T update(T entity);
+
+	public void delete(T entity);
+
+	public void deleteById(int id);
+}
\ No newline at end of file
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractHibernateDAOImp.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractHibernateDAOImp.java
new file mode 100644
index 0000000..fa87ff9
--- /dev/null
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractHibernateDAOImp.java
@@ -0,0 +1,55 @@
+package fr.soleil.archiving.snap.api.persistence.spring.dao;
+
+import java.io.Serializable;
+import java.util.List;
+
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.GenericTypeResolver;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public abstract class AbstractHibernateDAOImp<T extends Serializable> implements AbstractHibernateDAO<T> {
+	private Class<T> clazz;
+
+	@Autowired
+	private SessionFactory sessionFactory;
+
+	@SuppressWarnings("unchecked")
+	public AbstractHibernateDAOImp() {
+		this.clazz = (Class<T>) GenericTypeResolver.resolveTypeArgument(getClass(), AbstractHibernateDAOImp.class);
+	}
+
+	@SuppressWarnings("unchecked")
+	public T findOne(int id) {
+		return (T) getCurrentSession().get(clazz, id);
+	}
+
+	@SuppressWarnings("unchecked")
+	public List<T> findAll() {
+		return getCurrentSession().createQuery("from " + clazz.getName()).list();
+	}
+
+	public void save(T entity) {
+		getCurrentSession().persist(entity);
+	}
+
+	@SuppressWarnings("unchecked")
+	public T update(T entity) {
+		return (T) getCurrentSession().merge(entity);
+	}
+
+	public void delete(T entity) {
+		getCurrentSession().delete(entity);
+	}
+
+	public void deleteById(int id) {
+		final T entity = findOne(id);
+		delete(entity);
+	}
+
+	protected final Session getCurrentSession() {
+		return sessionFactory.getCurrentSession();
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractValDAO.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractValDAO.java
index 6808b62..11ba52e 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractValDAO.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractValDAO.java
@@ -1,9 +1,10 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao;
 
+import org.hibernate.Session;
 import org.hibernate.SessionFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.orm.hibernate3.HibernateTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
 
 import fr.soleil.archiving.snap.api.persistence.spring.dto.CompositeId;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.Val;
@@ -11,17 +12,26 @@ import fr.soleil.archiving.snap.api.persistence.spring.dto.Val;
 public abstract class AbstractValDAO<V extends Val> implements ValDAO<V> {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(AbstractValDAO.class);
-    protected HibernateTemplate hibernateTemplate;
+	@Autowired
+	SessionFactory sessionFactory;
+
+	protected Session getCurrentSession() {
+		return sessionFactory.getCurrentSession();
+	}
+
+	public AbstractValDAO() {
+
+	}
+
+	public AbstractValDAO(final SessionFactory sessionFactory) {
 
-    public AbstractValDAO(final SessionFactory sessionFactory) {
-        this.hibernateTemplate = new HibernateTemplate(sessionFactory);
     }
 
     @Override
     public V create(final V line) {
         LOGGER.debug("saving hibernate " + line);
         try {
-            hibernateTemplate.save(line);
+			getCurrentSession().save(line);
         } catch (Exception e) {
             LOGGER.error("hibernate save error", e);
         }
@@ -35,7 +45,7 @@ public abstract class AbstractValDAO<V extends Val> implements ValDAO<V> {
         V line = null;
         try {
             final Class<V> valueClass = this.getValueClass();
-            final Object res = hibernateTemplate.get(valueClass, compositeId);
+			final Object res = getCurrentSession().get(valueClass, compositeId);
             line = valueClass.cast(res);
         } catch (Exception e) {
             LOGGER.error("hibernate find error", e);
@@ -43,5 +53,14 @@ public abstract class AbstractValDAO<V extends Val> implements ValDAO<V> {
         return line;
     }
 
+	@Override
+	public void delete(final V item) {
+		try {
+			getCurrentSession().delete(item);
+		} catch (Exception e) {
+			LOGGER.error("hibernate find error", e);
+		}
+	}
+
     protected abstract Class<V> getValueClass();
 }
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ClasspathDAOBeansLoader.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ClasspathDAOBeansLoader.java
index 4c7818e..614eb44 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ClasspathDAOBeansLoader.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ClasspathDAOBeansLoader.java
@@ -25,13 +25,11 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao;
 
 import org.apache.commons.dbcp.BasicDataSource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.slf4j.ext.XLogger;
 import org.slf4j.ext.XLoggerFactory;
 import org.springframework.beans.factory.BeanFactory;
-import org.springframework.beans.factory.xml.XmlBeanFactory;
-import org.springframework.core.io.ClassPathResource;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 import fr.soleil.archiving.snap.api.persistence.spring.dto.Im1Val;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.Im2Val;
@@ -46,6 +44,7 @@ public class ClasspathDAOBeansLoader implements DAOBeansLoader {
 	final static XLogger logger = XLoggerFactory.getXLogger(ClasspathDAOBeansLoader.class);
     private static final String DEFAULT_BEANS_FILE_NAME = "beans.xml";
     private final String resourceName;
+	private final ApplicationContext applicationContext;
 
     private ValDAO<ScNum1Val> scNum1ValDAO;
     private ValDAO<ScNum2Val> scNum2ValDAO;
@@ -56,23 +55,23 @@ public class ClasspathDAOBeansLoader implements DAOBeansLoader {
     private ValDAO<Im1Val> im1ValDAO;
     private ValDAO<Im2Val> im2ValDAO;
 
-    public ClasspathDAOBeansLoader(String _resourceName, String userName, String password) {
+	public ClasspathDAOBeansLoader(String _resourceName, String userName, String password) {
     	logger.entry(_resourceName,userName,password);
 		boolean defaultResource = _resourceName == null || _resourceName.trim().length() == 0;
 		this.resourceName = defaultResource ? DEFAULT_BEANS_FILE_NAME : _resourceName;
 		logger.info("configure hibernate resource: " + resourceName);
 
-		BeanFactory factory = new XmlBeanFactory(new ClassPathResource(this.resourceName));
+		applicationContext = new ClassPathXmlApplicationContext(this.resourceName);
 
-		if (factory.getBean("dataSource") instanceof BasicDataSource) {
-		    BasicDataSource datasource = (BasicDataSource) factory.getBean("dataSource");
+		if (applicationContext.getBean("dataSource") instanceof BasicDataSource) {
+			BasicDataSource datasource = (BasicDataSource) applicationContext.getBean("dataSource");
 		    logger.info("Hibernate dataSource url: " + datasource.getUrl());
 		    logger.info("configure dataSource userName from device: " + userName);
 		    logger.info("configure dataSource password from device: " + password);
 		    datasource.setUsername(userName);
 		    datasource.setPassword(password);
 		}
-		this.instantiateBeans(factory);
+		this.instantiateBeans(applicationContext);
 		logger.exit();
     }
 
@@ -158,4 +157,9 @@ public class ClasspathDAOBeansLoader implements DAOBeansLoader {
     public String getResourceName() {
 	return this.resourceName;
     }
+
+	@Override
+	public ApplicationContext getApplicationContext() {
+		return applicationContext;
+	}
 }
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/DAOBeansLoader.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/DAOBeansLoader.java
index 0512b58..33ba594 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/DAOBeansLoader.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/DAOBeansLoader.java
@@ -24,6 +24,8 @@
  */
 package fr.soleil.archiving.snap.api.persistence.spring.dao;
 
+import org.springframework.context.ApplicationContext;
+
 import fr.soleil.archiving.snap.api.persistence.spring.dto.Im1Val;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.Im2Val;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.ScNum1Val;
@@ -36,6 +38,8 @@ import fr.soleil.archiving.snap.api.persistence.spring.dto.Sp2Val;
 public interface DAOBeansLoader {
 	public String getResourceName();
 
+	public ApplicationContext getApplicationContext();
+
 	public ValDAO<ScNum1Val> getScNum1ValDAO();
 
 	public ValDAO<ScNum2Val> getScNum2ValDAO();
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Im1ValDAOImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Im1ValDAOImpl.java
index bc98229..ebed92a 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Im1ValDAOImpl.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Im1ValDAOImpl.java
@@ -1,9 +1,11 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao;
 
 import org.hibernate.SessionFactory;
+import org.springframework.stereotype.Service;
 
 import fr.soleil.archiving.snap.api.persistence.spring.dto.Im1Val;
 
+@Service("im1ValDAO")
 public class Im1ValDAOImpl extends AbstractValDAO<Im1Val> {
 	public Im1ValDAOImpl(SessionFactory sessionFactory) {
 		super(sessionFactory);
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Im2ValDAOImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Im2ValDAOImpl.java
index 713a5ae..ae15604 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Im2ValDAOImpl.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Im2ValDAOImpl.java
@@ -1,9 +1,11 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao;
 
 import org.hibernate.SessionFactory;
+import org.springframework.stereotype.Service;
 
 import fr.soleil.archiving.snap.api.persistence.spring.dto.Im2Val;
 
+@Service("im2ValDAO")
 public class Im2ValDAOImpl extends AbstractValDAO<Im2Val> {
 	public Im2ValDAOImpl(SessionFactory sessionFactory) {
 		super(sessionFactory);
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScNum1ValDAOImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScNum1ValDAOImpl.java
index 2bed432..20b0891 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScNum1ValDAOImpl.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScNum1ValDAOImpl.java
@@ -1,9 +1,11 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao;
 
 import org.hibernate.SessionFactory;
+import org.springframework.stereotype.Service;
 
 import fr.soleil.archiving.snap.api.persistence.spring.dto.ScNum1Val;
 
+@Service("scNum1ValDAO")
 public class ScNum1ValDAOImpl extends AbstractValDAO<ScNum1Val> {
 	public ScNum1ValDAOImpl(SessionFactory sessionFactory) {
 		super(sessionFactory);
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScNum2ValDAOImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScNum2ValDAOImpl.java
index 89d57f9..998e592 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScNum2ValDAOImpl.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScNum2ValDAOImpl.java
@@ -1,9 +1,11 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao;
 
 import org.hibernate.SessionFactory;
+import org.springframework.stereotype.Service;
 
 import fr.soleil.archiving.snap.api.persistence.spring.dto.ScNum2Val;
 
+@Service("scNum2ValDAO")
 public class ScNum2ValDAOImpl extends AbstractValDAO<ScNum2Val> {
 	public ScNum2ValDAOImpl(SessionFactory sessionFactory) {
 		super(sessionFactory);
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScStr1ValDAOImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScStr1ValDAOImpl.java
index 40546b3..9485bf2 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScStr1ValDAOImpl.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScStr1ValDAOImpl.java
@@ -1,9 +1,11 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao;
 
 import org.hibernate.SessionFactory;
+import org.springframework.stereotype.Service;
 
 import fr.soleil.archiving.snap.api.persistence.spring.dto.ScStr1Val;
 
+@Service("scStr1ValDAO")
 public class ScStr1ValDAOImpl extends AbstractValDAO<ScStr1Val> {
 	public ScStr1ValDAOImpl(SessionFactory sessionFactory) {
 		super(sessionFactory);
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScStr2ValDAOImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScStr2ValDAOImpl.java
index 5702f1e..9038f27 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScStr2ValDAOImpl.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScStr2ValDAOImpl.java
@@ -1,9 +1,11 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao;
 
 import org.hibernate.SessionFactory;
+import org.springframework.stereotype.Service;
 
 import fr.soleil.archiving.snap.api.persistence.spring.dto.ScStr2Val;
 
+@Service("scStr2ValDAO")
 public class ScStr2ValDAOImpl extends AbstractValDAO<ScStr2Val> {
 	public ScStr2ValDAOImpl(SessionFactory sessionFactory) {
 		super(sessionFactory);
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/SnapshotDAO.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/SnapshotDAO.java
new file mode 100644
index 0000000..9400a79
--- /dev/null
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/SnapshotDAO.java
@@ -0,0 +1,7 @@
+package fr.soleil.archiving.snap.api.persistence.spring.dao;
+
+import fr.soleil.archiving.snap.api.model.Snapshot;
+
+public interface SnapshotDAO extends AbstractHibernateDAO<Snapshot> {
+
+}
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/SnapshotDAOImp.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/SnapshotDAOImp.java
new file mode 100644
index 0000000..413276d
--- /dev/null
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/SnapshotDAOImp.java
@@ -0,0 +1,13 @@
+package fr.soleil.archiving.snap.api.persistence.spring.dao;
+
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+import fr.soleil.archiving.snap.api.model.Snapshot;
+
+@Repository
+@Transactional
+public class SnapshotDAOImp extends AbstractHibernateDAOImp<Snapshot> implements SnapshotDAO {
+
+
+}
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Sp1ValDAOImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Sp1ValDAOImpl.java
index 8c5c73c..d9ae39b 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Sp1ValDAOImpl.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Sp1ValDAOImpl.java
@@ -1,9 +1,11 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao;
 
 import org.hibernate.SessionFactory;
+import org.springframework.stereotype.Service;
 
 import fr.soleil.archiving.snap.api.persistence.spring.dto.Sp1Val;
 
+@Service("sp1ValDAO")
 public class Sp1ValDAOImpl extends AbstractValDAO<Sp1Val> {
 	public Sp1ValDAOImpl(SessionFactory sessionFactory) {
 		super(sessionFactory);
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Sp2ValDAOImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Sp2ValDAOImpl.java
index 98d7db7..9f8ea54 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Sp2ValDAOImpl.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Sp2ValDAOImpl.java
@@ -1,9 +1,11 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao;
 
 import org.hibernate.SessionFactory;
+import org.springframework.stereotype.Service;
 
 import fr.soleil.archiving.snap.api.persistence.spring.dto.Sp2Val;
 
+@Service("sp2ValDAO")
 public class Sp2ValDAOImpl extends AbstractValDAO<Sp2Val> {
 	public Sp2ValDAOImpl(SessionFactory sessionFactory) {
 		super(sessionFactory);
diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ValDAO.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ValDAO.java
index bb960d8..91f1f23 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ValDAO.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ValDAO.java
@@ -33,4 +33,6 @@ public interface ValDAO<V extends Val> {
 
 	// Defined as executed within a read-only transaction in beans.xml
 	public V findByKey(CompositeId compositeId);
+
+	public void delete(V item);
 }
diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/AbstractValDAOTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/AbstractValDAOTest.java
index 4515979..eff392b 100644
--- a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/AbstractValDAOTest.java
+++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/AbstractValDAOTest.java
@@ -1,45 +1,24 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao.test;
 
-import org.junit.Ignore;
+import static org.junit.Assert.assertNotNull;
+
 import org.junit.Test;
-import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;
+import org.junit.runner.RunWith;
+import org.springframework.test.annotation.Rollback;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.transaction.annotation.Transactional;
 
-import fr.soleil.archiving.snap.api.persistence.SnapshotPersistenceManager;
-import fr.soleil.archiving.snap.api.persistence.SnapshotPersistenceManagerFactory;
 import fr.soleil.archiving.snap.api.persistence.spring.dao.ValDAO;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.Val;
 
-@Ignore
-public abstract class AbstractValDAOTest<V extends Val> extends AbstractTransactionalDataSourceSpringContextTests {
-    protected ValDAO<V> dao;
-
-    protected AbstractValDAOTest() {
-        // This means the names of the daughter classes' DAO setters have to be the same bean names as in beans.xml
-        super.setAutowireMode(AUTOWIRE_BY_NAME);
-    }
-
-    // Specifies the Spring configuration to load for this test fixture
-    @Override
-    protected String[] getConfigLocations() {
-        SnapshotPersistenceManagerFactory factory = SnapshotPersistenceManagerFactory.getInstance();
-        // will use the default resource name
-        SnapshotPersistenceManager manager = factory.getManager(null, null, null);
-        return new String[] { "classpath:" + manager.getResourceName() };
-    }
-
-    @Test
-    public void testInsert() {
-        V[] lines = this.buildLines();
-        for (int i = 0; i < lines.length; i++) {
-            dao.create(lines[i]);
-            V inDB = dao.findByKey(lines[i].getCompositeId());
-
-            this.compare(lines[i], inDB);
-        }
-    }
-
+@Rollback(true)
+@ContextConfiguration({ "classpath:beans.xml" })
+@Transactional
+@RunWith(SpringJUnit4ClassRunner.class)
+public abstract class AbstractValDAOTest<V extends Val> {
     protected void compare(V original, V copy) {
-        super.assertNotNull(copy);
+		assertNotNull(copy);
     }
 
     protected V[] buildLines() {
@@ -57,5 +36,18 @@ public abstract class AbstractValDAOTest<V extends Val> extends AbstractTransact
 
     protected abstract V buildLine();
 
+	protected abstract ValDAO<V> getDao();
+
     protected abstract V[] buildEmptyLines(int numberOfLines);
+
+	@Test
+	public void testInsert() {
+		V[] lines = this.buildLines();
+		for (int i = 0; i < lines.length; i++) {
+			getDao().create(lines[i]);
+			V inDB = getDao().findByKey(lines[i].getCompositeId());
+
+			this.compare(lines[i], inDB);
+		}
+	}
 }
diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ClasspathDAOBeansLoaderTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ClasspathDAOBeansLoaderTest.java
new file mode 100644
index 0000000..551984b
--- /dev/null
+++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ClasspathDAOBeansLoaderTest.java
@@ -0,0 +1,45 @@
+package fr.soleil.archiving.snap.api.persistence.spring.dao.test;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.transaction.annotation.Transactional;
+
+import fr.soleil.archiving.snap.api.persistence.spring.dao.ClasspathDAOBeansLoader;
+import fr.soleil.archiving.snap.api.persistence.spring.dao.DAOBeansLoader;
+import fr.soleil.archiving.snap.api.persistence.spring.dto.CompositeId;
+import fr.soleil.archiving.snap.api.persistence.spring.dto.ScStr1Val;
+
+
+@ContextConfiguration({ "classpath:beans.xml" })
+@Transactional
+@RunWith(SpringJUnit4ClassRunner.class)
+public class ClasspathDAOBeansLoaderTest {
+
+	@Test
+	public void construtorTest() {
+		DAOBeansLoader beans = new ClasspathDAOBeansLoader(null, "snap", "snap");
+		assertNotNull(beans.getScStr1ValDAO());
+		ScStr1Val line = new ScStr1Val();
+
+		CompositeId compositeId = new CompositeId();
+		int idAtt = 239;
+		int idSnap = 235;
+		compositeId.setIdAtt(idAtt);
+		compositeId.setIdSnap(idSnap);
+		line.setCompositeId(compositeId);
+
+		String value = "ScStr1Val example value";
+		line.setValue(value);
+
+		line = beans.getScStr1ValDAO().create(line);
+		assertNotNull(beans.getScStr1ValDAO().findByKey(compositeId));
+		beans.getScStr1ValDAO().delete(line);
+		assertNull(beans.getScStr1ValDAO().findByKey(compositeId));
+	}
+
+}
diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScNum1ValDAOTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScNum1ValDAOTest.java
index 85e0adf..f7c383e 100644
--- a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScNum1ValDAOTest.java
+++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScNum1ValDAOTest.java
@@ -1,16 +1,24 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao.test;
 
+import static org.junit.Assert.assertEquals;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+
 import fr.soleil.archiving.snap.api.persistence.spring.dao.ValDAO;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.CompositeId;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.ScNum1Val;
-import org.junit.Ignore;
 
-@Ignore
 public class ScNum1ValDAOTest extends AbstractValDAOTest<ScNum1Val> {
+
+	@Autowired
+	@Qualifier("scNum1ValDAO")
+	protected ValDAO<ScNum1Val> dao;
+
     @Override
     protected void compare(ScNum1Val original, ScNum1Val copy) {
         super.compare(original, copy);
-        super.assertEquals(original.getValue(), copy.getValue());
+		assertEquals(original.getValue(), copy.getValue(), 0);
     }
 
     @Override
@@ -30,16 +38,15 @@ public class ScNum1ValDAOTest extends AbstractValDAOTest<ScNum1Val> {
         return line;
     }
 
-    /**
-     * @param scNum1ValDAO
-     *            the scNum1ValDAO to set
-     */
-    public void setScNum1ValDAO(ValDAO<ScNum1Val> scNum1ValDAO) {
-        super.dao = scNum1ValDAO;
-    }
+
 
     @Override
     protected ScNum1Val[] buildEmptyLines(int numberOfLines) {
         return new ScNum1Val[numberOfLines];
     }
+
+	@Override
+	protected ValDAO<ScNum1Val> getDao() {
+		return dao;
+	}
 }
diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScNum2ValDAOTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScNum2ValDAOTest.java
index 499b5cd..387a046 100644
--- a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScNum2ValDAOTest.java
+++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScNum2ValDAOTest.java
@@ -1,17 +1,25 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao.test;
 
+import static org.junit.Assert.assertEquals;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+
 import fr.soleil.archiving.snap.api.persistence.spring.dao.ValDAO;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.CompositeId;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.ScNum2Val;
-import org.junit.Ignore;
 
-@Ignore
 public class ScNum2ValDAOTest extends AbstractValDAOTest<ScNum2Val> {
+
+	@Autowired
+	@Qualifier("scNum2ValDAO")
+	protected ValDAO<ScNum2Val> dao;
+
     @Override
     protected void compare(ScNum2Val original, ScNum2Val copy) {
         super.compare(original, copy);
-        super.assertEquals(original.getReadValue(), copy.getReadValue());
-        super.assertEquals(original.getWriteValue(), copy.getWriteValue());
+		assertEquals(original.getReadValue(), copy.getReadValue(), 0);
+		assertEquals(original.getWriteValue(), copy.getWriteValue(), 0);
     }
 
     @Override
@@ -33,16 +41,13 @@ public class ScNum2ValDAOTest extends AbstractValDAOTest<ScNum2Val> {
         return line;
     }
 
-    /**
-     * @param scNum1ValDAO
-     *            the scNum1ValDAO to set
-     */
-    public void setScNum2ValDAO(ValDAO<ScNum2Val> scNum1ValDAO) {
-        super.dao = scNum1ValDAO;
-    }
-
     @Override
     protected ScNum2Val[] buildEmptyLines(int numberOfLines) {
         return new ScNum2Val[numberOfLines];
     }
+
+	@Override
+	protected ValDAO<ScNum2Val> getDao() {
+		return dao;
+	}
 }
diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScStr1ValDAOTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScStr1ValDAOTest.java
index 5e9f800..0b3f74f 100644
--- a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScStr1ValDAOTest.java
+++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScStr1ValDAOTest.java
@@ -1,16 +1,26 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao.test;
 
+import static org.junit.Assert.assertEquals;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+
 import fr.soleil.archiving.snap.api.persistence.spring.dao.ValDAO;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.CompositeId;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.ScStr1Val;
-import org.junit.Ignore;
 
-@Ignore
+
 public class ScStr1ValDAOTest extends AbstractValDAOTest<ScStr1Val> {
+
+	@Autowired
+	@Qualifier("scStr1ValDAO")
+	protected ValDAO<ScStr1Val> dao;
+
+
     @Override
     protected void compare(ScStr1Val original, ScStr1Val copy) {
         super.compare(original, copy);
-        super.assertEquals(original.getValue(), copy.getValue());
+		assertEquals("shoudl be equal", original.getValue(), copy.getValue());
     }
 
     @Override
@@ -30,16 +40,14 @@ public class ScStr1ValDAOTest extends AbstractValDAOTest<ScStr1Val> {
         return line;
     }
 
-    /**
-     * @param scNum1ValDAO
-     *            the scNum1ValDAO to set
-     */
-    public void setScStr1ValDAO(ValDAO<ScStr1Val> scNum1ValDAO) {
-        super.dao = scNum1ValDAO;
-    }
 
     @Override
     protected ScStr1Val[] buildEmptyLines(int numberOfLines) {
         return new ScStr1Val[numberOfLines];
     }
+
+	@Override
+	protected ValDAO<ScStr1Val> getDao() {
+		return dao;
+	}
 }
diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScStr2ValDAOTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScStr2ValDAOTest.java
index 1fb6907..a852c84 100644
--- a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScStr2ValDAOTest.java
+++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScStr2ValDAOTest.java
@@ -1,17 +1,24 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao.test;
 
+import static org.junit.Assert.assertEquals;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+
 import fr.soleil.archiving.snap.api.persistence.spring.dao.ValDAO;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.CompositeId;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.ScStr2Val;
-import org.junit.Ignore;
 
-@Ignore
 public class ScStr2ValDAOTest extends AbstractValDAOTest<ScStr2Val> {
+	@Autowired
+	@Qualifier("scStr2ValDAO")
+	protected ValDAO<ScStr2Val> dao;
+
     @Override
     protected void compare(ScStr2Val original, ScStr2Val copy) {
         super.compare(original, copy);
-        super.assertEquals(original.getReadValue(), copy.getReadValue());
-        super.assertEquals(original.getWriteValue(), copy.getWriteValue());
+		assertEquals("shoudl be equals", original.getReadValue(), copy.getReadValue());
+		assertEquals("shoudl be equals", original.getWriteValue(), copy.getWriteValue());
     }
 
     @Override
@@ -33,16 +40,14 @@ public class ScStr2ValDAOTest extends AbstractValDAOTest<ScStr2Val> {
         return line;
     }
 
-    /**
-     * @param scNum1ValDAO
-     *            the scNum1ValDAO to set
-     */
-    public void setScStr2ValDAO(ValDAO<ScStr2Val> scNum1ValDAO) {
-        super.dao = scNum1ValDAO;
-    }
 
     @Override
     protected ScStr2Val[] buildEmptyLines(int numberOfLines) {
         return new ScStr2Val[numberOfLines];
     }
+
+	@Override
+	protected ValDAO<ScStr2Val> getDao() {
+		return dao;
+	}
 }
diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/SnapshotDAOTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/SnapshotDAOTest.java
new file mode 100644
index 0000000..ec694a6
--- /dev/null
+++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/SnapshotDAOTest.java
@@ -0,0 +1,35 @@
+package fr.soleil.archiving.snap.api.persistence.spring.dao.test;
+
+import static org.junit.Assert.assertNotNull;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.annotation.Rollback;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.transaction.annotation.Transactional;
+
+import fr.soleil.archiving.snap.api.model.Snapshot;
+import fr.soleil.archiving.snap.api.persistence.spring.dao.SnapshotDAO;
+
+@Rollback(true)
+@ContextConfiguration({ "classpath:beans.xml" })
+@Transactional
+@RunWith(SpringJUnit4ClassRunner.class)
+public class SnapshotDAOTest {
+	@Autowired
+	SnapshotDAO dao;
+
+	@Test
+	public void findTest() {
+		List<Snapshot> s = dao.findAll();
+		for (Snapshot item : s) {
+			System.out.println(item.getIdSnap() + " " + item.getIdContext() + " " + item.getTime());
+		}
+		assertNotNull(s);
+	}
+
+}
diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/Sp1ValDAOTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/Sp1ValDAOTest.java
index c7afbc4..904d99c 100644
--- a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/Sp1ValDAOTest.java
+++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/Sp1ValDAOTest.java
@@ -1,17 +1,25 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao.test;
 
+import static org.junit.Assert.assertEquals;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+
 import fr.soleil.archiving.snap.api.persistence.spring.dao.ValDAO;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.CompositeId;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.Sp1Val;
-import org.junit.Ignore;
 
-@Ignore
 public class Sp1ValDAOTest extends AbstractValDAOTest<Sp1Val> {
+
+	@Autowired
+	@Qualifier("sp1ValDAO")
+	protected ValDAO<Sp1Val> dao;
+
     @Override
     protected void compare(Sp1Val original, Sp1Val copy) {
         super.compare(original, copy);
-        super.assertEquals(original.getValue(), copy.getValue());
-        super.assertEquals(original.getDimX(), copy.getDimX());
+		assertEquals(original.getValue(), copy.getValue());
+		assertEquals(original.getDimX(), copy.getDimX());
     }
 
     @Override
@@ -33,16 +41,13 @@ public class Sp1ValDAOTest extends AbstractValDAOTest<Sp1Val> {
         return line;
     }
 
-    /**
-     * @param scNum1ValDAO
-     *            the scNum1ValDAO to set
-     */
-    public void setSp1ValDAO(ValDAO<Sp1Val> scNum1ValDAO) {
-        super.dao = scNum1ValDAO;
-    }
-
     @Override
     protected Sp1Val[] buildEmptyLines(int numberOfLines) {
         return new Sp1Val[numberOfLines];
     }
+
+	@Override
+	protected ValDAO<Sp1Val> getDao() {
+		return dao;
+	}
 }
diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/Sp2ValDAOTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/Sp2ValDAOTest.java
index d0c57bb..8637de5 100644
--- a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/Sp2ValDAOTest.java
+++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/Sp2ValDAOTest.java
@@ -1,18 +1,26 @@
 package fr.soleil.archiving.snap.api.persistence.spring.dao.test;
 
+import static org.junit.Assert.assertEquals;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+
 import fr.soleil.archiving.snap.api.persistence.spring.dao.ValDAO;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.CompositeId;
 import fr.soleil.archiving.snap.api.persistence.spring.dto.Sp2Val;
-import org.junit.Ignore;
 
-@Ignore
 public class Sp2ValDAOTest extends AbstractValDAOTest<Sp2Val> {
+
+	@Autowired
+	@Qualifier("sp2ValDAO")
+	protected ValDAO<Sp2Val> dao;
+
     @Override
     protected void compare(Sp2Val original, Sp2Val copy) {
         super.compare(original, copy);
-        super.assertEquals(original.getReadValue(), copy.getReadValue());
-        super.assertEquals(original.getWriteValue(), copy.getWriteValue());
-        super.assertEquals(original.getDimX(), copy.getDimX());
+		assertEquals(original.getReadValue(), copy.getReadValue());
+		assertEquals(original.getWriteValue(), copy.getWriteValue());
+		assertEquals(original.getDimX(), copy.getDimX());
     }
 
     @Override
@@ -36,16 +44,13 @@ public class Sp2ValDAOTest extends AbstractValDAOTest<Sp2Val> {
         return line;
     }
 
-    /**
-     * @param scNum1ValDAO
-     *            the scNum1ValDAO to set
-     */
-    public void setSp2ValDAO(ValDAO<Sp2Val> scNum1ValDAO) {
-        super.dao = scNum1ValDAO;
-    }
-
     @Override
     protected Sp2Val[] buildEmptyLines(int numberOfLines) {
         return new Sp2Val[numberOfLines];
     }
+
+	@Override
+	protected ValDAO<Sp2Val> getDao() {
+		return dao;
+	}
 }
diff --git a/src/test/resources/beans.xml b/src/test/resources/beans.xml
new file mode 100644
index 0000000..41180c8
--- /dev/null
+++ b/src/test/resources/beans.xml
@@ -0,0 +1,77 @@
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:aop="http://www.springframework.org/schema/aop"
+       xmlns:tx="http://www.springframework.org/schema/tx"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
+       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
+       http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd">
+	<context:component-scan base-package="fr.soleil.archiving.snap.api"/>
+	<!-- DATASOURCE DEFINITION VVVVVVV-->
+	<bean id="dataSource"
+        class="org.apache.commons.dbcp.BasicDataSource"
+        destroy-method="close"> 
+			<property name="initialSize" value="8"/>
+		    <property name="maxActive" value="4"/>
+		    <property name="maxIdle" value="8"/>
+
+		    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
+		    <property name="url" value="jdbc:oracle:thin:@195.221.4.203:1521:TEST11SE" />
+		    <property name="username" value="snap" />
+		    <property name="password" value="snap" />
+	</bean>
+  	<!-- DATASOURCE DEFINITION ^^^^^^-->
+	
+	<!-- HIBERNATE DEFINITION VVVVVVV-->
+    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
+		<property name="dataSource" ref="dataSource"/>
+	
+		<property name="mappingResources">
+		  <list>
+			<value>valueTables.hbm.xml</value>
+		  </list>
+		</property>
+		<property name="packagesToScan" value="fr.soleil.archiving.snap.api.model" />   
+
+    	<property name="hibernateProperties">
+		  <value>
+			hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
+			hibernate.default_schema=SNAP
+			hibernate.show_sql=true
+			hibernate.format_sql=true
+			hibernate.transaction.factory_class=org.hibernate.transaction.JDBCTransactionFactory
+			hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext
+			hibernate.connection.autocommit=false
+			hibernate.connection.release_mode=after_transaction
+			hibernate.generate_statistics=true
+		  </value>
+		</property>
+    </bean>
+    <!-- HIBERNATE DEFINITION ^^^^^^-->
+  
+    <!-- TRANSACTIONS DEFINITIONS VVVVVVV-->
+		<!-- MANAGER -->
+		<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
+			<property name="sessionFactory" ref="sessionFactory"/>
+		</bean>
+		
+		<tx:annotation-driven transaction-manager="transactionManager"/>
+	
+		<!-- DEFINES AN "ADVICE" IE. A WAY TO USE THE TRANSACTION MANAGER AROUND METHODS -->
+		<tx:advice id="txAdvice" transaction-manager="transactionManager"><!-- the transactional advice (i.e. what 'happens'; see the <aop:advisor/> bean below) -->	  
+			<tx:attributes><!-- the transactional semantics... -->
+				<tx:method name="findBy*" read-only="true"/><!-- all methods starting with 'get' are read-only -->
+				<tx:method name="*"/><!-- other methods use the default transaction settings -->
+			</tx:attributes>
+		</tx:advice>
+	
+    	<!-- DEFINES WHERE "ADVICES" WILL BE USED-->
+		<aop:config><!-- ensure that the above transactional advice runs for any execution of an operation defined by the FooService interface -->
+			<aop:pointcut id="valDAOOperation" expression="execution(* fr.soleil.archiving.snap.api.persistence.spring.dao.ValDAO.*(..))"/>
+			<aop:advisor advice-ref="txAdvice" pointcut-ref="valDAOOperation"/>
+		</aop:config>
+    <!-- TRANSACTIONS DEFINITIONS ^^^^^^-->
+
+	
+</beans>
\ No newline at end of file
diff --git a/src/test/resources/valueTables.hbm.xml b/src/test/resources/valueTables.hbm.xml
new file mode 100644
index 0000000..8bf5854
--- /dev/null
+++ b/src/test/resources/valueTables.hbm.xml
@@ -0,0 +1,82 @@
+<?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 package="fr.soleil.archiving.snap.api.persistence.spring.dto">
+	
+	<class name="ScNum1Val" table="t_sc_num_1val">
+        <composite-id name="compositeId" class="CompositeId">
+				<key-property name="idSnap" column="ID_SNAP"/>
+		        <key-property name="idAtt" column="ID_ATT"/>
+		</composite-id>
+        <property name="value" column="VALUE"/>
+    </class>
+
+	<class name="ScNum2Val" table="t_sc_num_2val">
+        <composite-id name="compositeId" class="CompositeId">
+				<key-property name="idSnap" column="ID_SNAP"/>
+		        <key-property name="idAtt" column="ID_ATT"/>
+		</composite-id>
+        <property name="readValue" column="READ_VALUE"/>
+        <property name="writeValue" column="WRITE_VALUE"/>
+    </class>
+    
+  	<class name="ScStr1Val" table="t_sc_str_1val">
+        <composite-id name="compositeId" class="CompositeId">
+				<key-property name="idSnap" column="ID_SNAP"/>
+		        <key-property name="idAtt" column="ID_ATT"/>
+		</composite-id>
+        <property name="value" column="VALUE"/>
+    </class>
+    
+   <class name="ScStr2Val" table="t_sc_str_2val">
+        <composite-id name="compositeId" class="CompositeId">
+				<key-property name="idSnap" column="ID_SNAP"/>
+		        <key-property name="idAtt" column="ID_ATT"/>
+		</composite-id>
+        <property name="readValue" column="READ_VALUE"/>
+        <property name="writeValue" column="WRITE_VALUE"/>
+    </class>
+
+	<class name="Sp1Val" table="t_sp_1val">
+        <composite-id name="compositeId" class="CompositeId">
+				<key-property name="idSnap" column="ID_SNAP"/>
+		        <key-property name="idAtt" column="ID_ATT"/>
+		</composite-id>
+		<property name="dimX" column="DIM_X"/>
+        <property name="value" column="VALUE"/>
+    </class>
+
+	<class name="Sp2Val" table="t_sp_2val">
+        <composite-id name="compositeId" class="CompositeId">
+				<key-property name="idSnap" column="ID_SNAP"/>
+		        <key-property name="idAtt" column="ID_ATT"/>
+		</composite-id>
+		<property name="dimX" column="DIM_X"/>
+		<property name="readValue" column="READ_VALUE"/>
+        <property name="writeValue" column="WRITE_VALUE"/>
+    </class>
+    
+    <class name="Im1Val" table="t_im_1val">
+        <composite-id name="compositeId" class="CompositeId">
+				<key-property name="idSnap" column="ID_SNAP"/>
+		        <key-property name="idAtt" column="ID_ATT"/>
+		</composite-id>
+		<property name="dimX" column="DIM_X"/>
+		<property name="dimY" column="DIM_Y"/>
+        <property name="value" column="VALUE"/>
+    </class>
+
+	<class name="Im2Val" table="t_im_2val">
+        <composite-id name="compositeId" class="CompositeId">
+				<key-property name="idSnap" column="ID_SNAP"/>
+		        <key-property name="idAtt" column="ID_ATT"/>
+		</composite-id>
+		<property name="dimX" column="DIM_X"/>
+		<property name="dimY" column="DIM_Y"/>
+		<property name="readValue" column="READ_VALUE"/>
+        <property name="writeValue" column="WRITE_VALUE"/>
+    </class>
+
+</hibernate-mapping>
\ No newline at end of file
-- 
GitLab