gpt4 book ai didi

java - 如何从 Insert 语句返回主键 Mysql Java Eclipselink

转载 作者:行者123 更新时间:2023-11-29 18:30:36 25 4
gpt4 key购买 nike

我有一个简单的命名 native 查询,可以在插入 REST Web 服务时生成新的 PK。

Message.java
@NamedNativeQueries({@NamedNativeQuery( name="Message.send", query="INSERT INTO Leaf.Message (MessageID,Status,Message,Description,SentTime,ipAdd) VALUES\n" +
"(null,?Status,?Message,NOW()),?ipAdd;")})


AbstractFacade.java

public void CreateMessage(Message entity, InetAddress clientIP) {
try{
javax.persistence.Query q = getEntityManager().createNamedQuery("Message.send",entityClass);
q.setParameter("Status", "send");
q.setParameter("Message", entity.getMessage());
q.setParameter("ipAdd",clientIP.hashCode());
q.executeUpdate();

}
catch(Exception e){
String s= ""+e.getMessage().toString();
}}

如何获得新创建的PK?是否使用 SELECT LAST_INSERT_ID() ?因为executeUpdate没有返回结果?和 ResultSet rs = q.getGenerateKeys();不是有效的语法。

最佳答案

是的,对于 MySQL,它将是 LAST_INSERT_ID .

但是,在您的情况下,使用 EntityManager::persist 会更有意义。 。例如,查看 Hibernate tutorial :

EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.persist( new Event( "Our very first event!", new Date() ) );
entityManager.persist( new Event( "A follow up event", new Date() ) );
entityManager.getTransaction().commit();
entityManager.close();

在您的情况下,您可以将 Message 的实例传递给 persist 方法。

persist返回后,您可以通过调用getMessageID直接访问实体的身份:

getEntityManager().persist(message);
System.out.println("Inserted message: " + message.getMessageID());

关于java - 如何从 Insert 语句返回主键 Mysql Java Eclipselink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45721247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com