【问题标题】:em.getTransaction().commit(); causing an error in jpaem.getTransaction().commit();在jpa中导致错误
【发布时间】:2017-12-06 18:46:20
【问题描述】:

尝试将 xml 文件解析到 mysql 数据库时出现以下错误。数据库已创建。 我不明白为什么它不能创建用户

错误代码 Console errors

驱动程序.java

package DAO;

import parser.XMLParser;

import java.util.ArrayList;
import java.util.List;

import entities.*;

public class NewDriver {

public static void main(String args[]) throws Exception{
    UserDAO userDAO = new UserDAO();

    ProductDAO productDAO= new ProductDAO();
    ProductOnHandDAO productOnHandDAO= new ProductOnHandDAO();
    XMLParser x = new XMLParser();

    User user1 = new User("luke", "luke");
    userDAO.createUser(user1);

    Store store = new Store();
    StoreDAO storeDAO= new StoreDAO();
    storeDAO.createStore(store);


    List<Product> products = x.getProduct("‪test.xml");
    for(Product p : products){
        p.setStore(store);
        productDAO.createProduct(p);
    }

    List<Product> productList = ProductDAO.findByStore(store);
    List<ProductOnHand>productOnHands;

    productOnHands = x.getAllProductOnHand(productList,"‪test.xml");
    for (ProductOnHand p1 : productOnHands){
        p1.setStore(store);
        ProductOnHandDAO.createProductOnHand(p1);

    }


}
} 

UserDAO.java

public class UserDAO {

 public void createUser(User user){
        PersistenceUtil.persist(user);
    }

    public List<User> findAllUsers(){
        EntityManager em = PersistenceUtil.createEM();
        List<User> users = (List<User>)
                em.createNamedQuery("User.findAllUsers").getResultList();
        em.close();
        return users;
    }

     public User findUserByUsernameAndPassword(String username, String 
      password){
        EntityManager em = PersistenceUtil.createEM();
        List<User> users = (List<User>)






   em.createNamedQuery("User.findUserByUsernameAndPassword").
   setParameter("username", username).setParameter("password", 
   password).getResultList();
        em.close();
        return users.get(0);
    }
 }

用户.java

@Entity
public class User {

@Id
@Column
private int id;

private String username;
private String password;


public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public User(String username, String password) {
    this.username = username;
    this.password = password;
}


public User() {
}
}

Persistence.util

public class PersistenceUtil implements Serializable {

private static final long serialVersionUID = 1L;


protected static EntityManagerFactory emf =
        Persistence.createEntityManagerFactory("dt354rel");


public static void persist(Object entity) {
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    em.persist(entity);
    em.getTransaction().commit();
    em.close();
}

public static void remove(Object entity) {
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    Object mergedEntity = em.merge(entity);
    em.remove(mergedEntity);
    em.getTransaction().commit();
    em.close();
}

public static Object merge(Object entity) {
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    entity = em.merge(entity);
    em.getTransaction().commit();
    em.close();
    return entity;
}

public static EntityManager createEM() {
    return emf.createEntityManager();
}

}  

如果我查看了我的持久性课程,我会得到任何帮助,这一切对我来说似乎都很好。

【问题讨论】:

  • 将错误放在问题中,而不是在某个随机的远程站点上!
  • 你有解决方案来帮助我还是只是来告诉我?
  • 请阅读该网站关于如何提出问题的常见问题解答,它会告诉您在问题中包含所有相关细节。您想忽略这一点并要求“给我答案”。除非您遵循此处非常合理的信息,否则这不太可能成功。

标签: java mysql hibernate jpa persistence


【解决方案1】:

查看错误:

Table dt354rel.user doesn't exist

检查此表是否丢失或您无权访问该表。

顺便说一句。您不必在所有这些方法中创建新的 EntityManager。你可以创建它一次重复使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-25
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 2011-04-29
    • 2015-06-09
    • 1970-01-01
    相关资源
    最近更新 更多