Buenas, soy novato en esto de Spring+Hibernate, os comento mi problema por si me podeis ayudar:
* BBDD: Derby.
* HIBERNATE 3.2.3
* SPRING 2.0.4
* Tengo 3 entidades: NODE, ROOM (tiene una referencia @ManyToOne a NODE) y EQUIPMENT (tiene una referencia @ManyToOne a NODE y otra a ROOM). que están dadas de alta en el aplication contex así como las propiedades de conexión de la BBDD.
* Un DAO cuyos métodos están implementado con generics, esto es...
Código PHP:
public interface MusicDAO<T extends MyEntity>
{
public void create(T entity);
public void delete(T entity);
public void update(T entity);
public List<T> readAll(Class<T> clazzEntity);
public T readById(Serializable id, Class<T> clazzEntity);
}
Donde MyEntity es un interfaz vacio que es implementado por las 3 entidades.
Mi problema está en la inserción de datos, la estoy realziando de momento desde clases de Test por lo que para cada Entidiad utilizo un método distinto.
Código PHP:
public class Create extends TestCase {
Logger log = Logger.getLogger(Create.class);
@Override
protected void setUp() throws Exception {
super.setUp();
}
@SuppressWarnings("unchecked")
@Transactional
public void testCreateNode() throws Exception {
log.debug(" --> DAO.");
MusicDAO<NodeEntity> dao = (MusicDAO<NodeEntity>) BeanFactory.getDao();
log.debug(" --> DAO GENERADO.");
log.debug(" --> INCIO CARGA DE NODOS.");
String[] arrayNombreCorto = { "MADRID", "MURCIA",
"ALICANTE", "MALAGA" };
String[] arrayNombre = { "COM. MADRID", "Reg. Murcia",
"COM. VALENCIANA", "ANDALUCIA" };
for (int index = 0; index < arrayNombreCorto.length; index++) {
NodeEntity node = new NodeEntity();
node.setName(arrayNombre[index]);
node.setShortName(arrayNombreCorto[index]);
node.setCountry("SPAIN");
dao.create(node);
}
List<NodeEntity> lstNode = ((MusicDAO<NodeEntity>) BeanFactory.getDao())
.readAll(NodeEntity.class);
for (NodeEntity nodeEntity : lstNode) {
log.debug("-->" + nodeEntity.toString());
}
}
@SuppressWarnings("unchecked")
@Transactional
public void testCreateRoom() throws Exception {
log.debug(" --> DAO.");
MusicDAO<RoomEntity> dao = (MusicDAO<RoomEntity>) BeanFactory.getDao();
List<NodeEntity> lstNode = ((MusicDAO<NodeEntity>) BeanFactory.getDao())
.readAll(NodeEntity.class);
log.debug(" --> INCIO CARA DE ROOMS.");
String[] arrayNombreRoom = { "ROOM_1", "ROOM_2", "ROOM_3", "ROOM_4",
"ROOM_5", "ROOM_6", "ROOM_7", "ROOM_8", "ROOM_9", "ROOM_10",
};
for (NodeEntity nodeEntity : lstNode) {
for (String valueNombre : arrayNombreRoom) {
RoomEntity roomEntity = new RoomEntity();
roomEntity.setNode(nodeEntity);
roomEntity.setName(nodeEntity.getName().trim() + " - "
+ valueNombre);
log.debug("--> " + roomEntity.toString());
dao.create(roomEntity);
}
}
}
........
La inserción en NODE se realiza correctamente, pero en ROOM... falla, diciendome que la tabla no existe en BBDD,
ASEGURO, JURO y PERJURO que las tablas antes de la ejecución EXISTIAN pero han desaparecido. Os adjunto las entidades:
Código PHP:
@Entity
@Table(name = "NODE")
public class NodeEntity implements com.server.util.MyEntity{
@Id
@GeneratedValue
@Column(name = "ID", unique = true, updatable = false)
private Integer id = null;
@Column(name = "SHORT_NAME", length = 50, unique = true, updatable = true)
private String shortName = null;
@Column(name = "NAME", length = 50, unique = true, updatable = true)
private String name = null;
@Column(name = "COUNTRY", length = 50, unique = true, updatable = false)
private String country = null;
Código PHP:
@Entity
@Table(name = "ROOM")
public class RoomEntity implements com.server.util.MyEntity{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "ID", nullable = false , unique= true)
private Integer id = null;
@ManyToOne( cascade= CascadeType.ALL, targetEntity=NodeEntity.class )
@JoinColumn(name = "NODE_ID")
private NodeEntity node= null;
@Column(name = "NAME", length = 50, unique = true, nullable = false, updatable = true)
private String name = null;
MUCHAS GRACIAS DE ANTE MANO.