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!
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 ;
@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 ^^