JPA + Stored Procedures

0 respostas
Guilherme_Gomes

Esse aparentemente é um assunto muito comentado na WEB. Mas com poucas referencias. Os poucos lugares falando sobre o assunto são muito pobres.

Minha duvida é de como posso criar procedures no MySQL e mapear no JPA. Preciso fazer selects, inserts, updates e deletes. Preciso que, no caso de auto_increment, seja retornado o valor incrementado!
Uso MySQL!

Por exemplo, já criei a seguinte a seguinte procedure:
DELIMITER $$

USE `testesp`$$

DROP PROCEDURE IF EXISTS `insere_usuario_sp`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `insere_usuario_sp`(v_nome VARCHAR(80), v_password VARCHAR(80))
BEGIN
IF ((v_nome != '') && (v_password != '')) THEN
INSERT INTO USER (nome, PASSWORD)
VALUES (v_nome, v_password);
SELECT LAST_INSERT_ID();
ELSE
SELECT 'Usuario e senha sao campos obrigatorios!' AS Msg;
END IF; 
END$$

DELIMITER ;
Tentei o seguinte codigo:
@Table(name="user")
@Entity
@NamedNativeQuery(name="insert",resultClass=Integer.class,query="call insere_usuario_sp(?,?)")
public class User {
	@Id
	private Integer id;

	private String nome;

	private String password;
...
}
public class UserDAO {
	@PersistenceContext
	private EntityManager entityManager;

	public User insert(User user){
		Query query = entityManager.createNamedQuery("insert");
		query.setParameter(1, user.getNome());
		query.setParameter(2, user.getPassword());
		List list = query.getResultList();
		Object object = null;
		if(list != null && list.size() > 0)
			object = list.get(0);
		if(object instanceof Integer){
			user.setId((Integer) object);
		} else {
			System.out.println("Veio isso: " + object + " - " + object.getClass().getName());
		}

		return user;
	}
...
}

Mas não obtive sucesso... Já tentei de umas 50 outras maneiras antes dessa ^^

Criado 18 de setembro de 2009
Respostas 0
Participantes 1