Java 使用JPA向数据库插入值
我试图通过JPA hibernate从ms sql表中读取一列的值,并在对每个值进行一些操作后将它们存储到同一表的另一列中。下面的代码从Kennzahl表中读取列kNFormelZPS,然后在id为0的表中插入一条新记录,并仅将单词new写入该单元格!然后它抛出一个异常,表示主键不能复制。我猜它试图生成Id为0的新记录Java 使用JPA向数据库插入值,java,sql-server,hibernate,jpa,Java,Sql Server,Hibernate,Jpa,我试图通过JPA hibernate从ms sql表中读取一列的值,并在对每个值进行一些操作后将它们存储到同一表的另一列中。下面的代码从Kennzahl表中读取列kNFormelZPS,然后在id为0的表中插入一条新记录,并仅将单词new写入该单元格!然后它抛出一个异常,表示主键不能复制。我猜它试图生成Id为0的新记录 public class ManageKennzahl { private static EntityManagerFactory factory; EntityManager
public class ManageKennzahl {
private static EntityManagerFactory factory;
EntityManager em = null;
private static List<String> kNFormelZPs = new ArrayList<>();
/**
* @param args
*/
public static void main(String[] args) {
try {
factory = Persistence.createEntityManagerFactory("migration");
} catch (Throwable ex) {
System.err.println("Failed to create sessionFactory object." + ex);
throw new ExceptionInInitializerError(ex);
}
ManageKennzahl mk = new ManageKennzahl();
mk.getKNFormelZPsFromKennzahl();
mk.getKNFormelNPsFromKennzahl();
mk.convert();
}
/**
*
*/
private List<String> getKNFormelZPsFromKennzahl() {
em = factory.createEntityManager();
try {
List<Kennzahl> kNFormelZPSs = em.createQuery("Select i From Kennzahl i ", Kennzahl.class).getResultList();
for (Kennzahl kNFormelZPS : kNFormelZPSs) {
String FormelZPs = kNFormelZPS.getFormelZPseudo();
aquaQidbKNFormelZPs.add(FormelZPs);
}
} catch (HibernateException e) {
e.printStackTrace();
} finally {
em.close();
}
return kNFormelZPs;
}
private void convert() {
Kennzahl kn = new Kennzahl();
em = factory.createEntityManager();
for (String fomelZPs : kNFormelZPs) {
em.getTransaction().begin();
kn.setFormelZGL1(fomelZPs + "new");
em.persist(kn);
em.getTransaction().commit();
}
}
}
主要问题是没有使用合并以避免创建新实体
private void convert() {
Kennzahl kn = new Kennzahl();
em = factory.createEntityManager();
for (Kennzahl qidbKennzahl : aqidbKennzahlen) {
qidbKennzahl.setFormelZGL1(qidbKennzahl .getFormelZPseudo() + " test");
em.merge(aquaQidbKennzahl);
}
em.getTransaction().commit();
}
为什么JPA应用程序要玩HibernateException?!没有实体,任何人怎么能对此发表评论?为什么不通过查看日志来调试它呢?您似乎总是坚持使用同一个Kennzahl实例。