【发布时间】:2016-04-11 22:04:37
【问题描述】:
我正在尝试通过 JPA hibernate 从 ms sql 表中读取列的值,并在对每个值进行一些操作后将它们存储到同一表的另一列中。下面的代码从表 Kennzahl 中读取列 kNFormelZPS,然后在表的请求处插入一条 id 为 0 的新记录,并将单词 new 写入该单元格!然后它会抛出一个异常,说主键不能重复。我猜它会尝试生成 ID 为 0 的新记录。
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();
}
}
}
【问题讨论】:
-
为什么 JPA 应用程序会使用“HibernateException”?!没有实体,怎么会有人对此发表评论?为什么不通过查看LOG来调试呢?
-
你似乎总是坚持同一个
Kennzahl实例。
标签: java sql-server hibernate jpa