Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用两个列表和数据库放入hashmap_Java_Hibernate_Mapping_Many To Many - Fatal编程技术网

Java 使用两个列表和数据库放入hashmap

Java 使用两个列表和数据库放入hashmap,java,hibernate,mapping,many-to-many,Java,Hibernate,Mapping,Many To Many,我有两个类,User和Customer,使用hibernate,我映射了这些表,现在我想从数据库中检索数据,我可以将值放入hashmap中,这样对于每个用户,如果映射表中存在特定的客户,那么map的键设置为客户名称,值设置为true或false,取决于映射表 我已检索到两个列表: static List<User> listUsers = new ArrayList<User>(); static List<Customer> listCustomers =

我有两个类,User和Customer,使用hibernate,我映射了这些表,现在我想从数据库中检索数据,我可以将值放入hashmap中,这样对于每个用户,如果映射表中存在特定的客户,那么map的键设置为客户名称,值设置为true或false,取决于映射表

我已检索到两个列表:

static List<User> listUsers = new ArrayList<User>();
static List<Customer> listCustomers = new ArrayList<Customer>();
List<UserTO> list = new ArrayList<UserTO>();

public static List<Customer> getListOfCustomers() {
    HibernateUtil.openSession();
    Session session = HibernateUtil.getSession();
    Transaction tx = null;
    try {
        tx = session.getTransaction();
        tx.begin();
        listCustomers = session.createQuery("from Customer").list();
        tx.commit();
    } catch (Exception e) {
        if (tx != null) {
            tx.rollback();
        }
        e.printStackTrace();
    } finally {
        session.close();
    }
    return listCustomers;
}
(similarly list of users)
static List listUsers=new ArrayList();
静态列表listCustomers=new ArrayList();
列表=新的ArrayList();
公共静态列表getListOfCustomers(){
HibernateUtil.openSession();
Session Session=HibernateUtil.getSession();
事务tx=null;
试一试{
tx=session.getTransaction();
tx.begin();
listCustomers=session.createQuery(“来自客户”).list();
tx.commit();
}捕获(例外e){
如果(tx!=null){
tx.回滚();
}
e、 printStackTrace();
}最后{
session.close();
}
退回客户名单;
}
(用户列表)
在UserTO类中,我有:

public class UserTO implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long id;

private String userId;
private Map<String, Boolean> map = new HashMap<String, Boolean>();
(getter and setter)
public类UserTO实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@生成值
私人长id;
私有字符串用户标识;
私有映射映射=新的HashMap();
(盖特和塞特)
我试着这样做:

public static void execute() {
    getListOfUsers();
    getListOfCustomers();
    for (User user : listUsers) {
        UserTO u = new UserTO();
        Map<String, Boolean> map = new HashMap<>();
        for (Customer customer : listCustomers) {
            if (customer.getCompanyName() == user.getCustomers(customer)) {
                map.put(customer.getCompanyName(), true);
            } else {
                map.put(customer.getCompanyName(), false);
            }
        }
        user.getUserId();
        u.setUserId(user.getUserId());
        u.setMap(map);
        listUsers.add(user);
    }
}
publicstaticvoidexecute(){
getListOfUsers();
getListOfCustomers();
for(用户:listUsers){
UserTO u=新的UserTO();
Map Map=newhashmap();
对于(客户:列表客户){
if(customer.getCompanyName()==user.getCustomers(customer)){
map.put(customer.getCompanyName(),true);
}否则{
map.put(customer.getCompanyName(),false);
}
}
getUserId();
u、 setUserId(user.getUserId());
u、 setMap(map);
添加(用户);
}
}
这给了我并发修改异常 我不知道我哪里做错了,下一步该怎么办。

原因是当您进行迭代时,您试图同时添加到列表中,如下所示:

for (User user : listUsers) {
....
    listUsers.add(user);
解决此问题的一种方法是创建一个临时列表并不断添加到该列表中,在for循环之后,使用
listUsers
上的
addAll
方法添加在循环中添加的所有用户

注意:为了选择数据,您不需要事务,因为select不会对您的表产生任何副作用。

原因是您试图在迭代的同时添加到列表中,如:

for (User user : listUsers) {
....
    listUsers.add(user);
解决此问题的一种方法是创建一个临时列表并不断添加到该列表中,在for循环之后,使用
listUsers
上的
addAll
方法添加在循环中添加的所有用户


注意:为了选择数据,您不需要事务,因为select不会对您的表产生任何副作用。

您将获得并发修改异常,因为HashMap不是线程安全的。请改用concurrentHashMap。感谢您的帮助。

您将获得并发修改异常,因为HashMap不是线程安全的。请使用震荡请改为rrentHashMap。谢谢,希望能有所帮助。

当您迭代此listuser时,正在将用户添加到listUsers。这将导致给定的异常


使用list.add(u);

在迭代此listuser时,您正在将用户添加到listUsers。这将导致给定的异常


使用list.add(u);

您试图做的是从列表中获取一个User对象,然后再次将其添加到列表中。它不起作用,原因如下:

  • 您正在迭代列表并添加到不允许的同一循环中,并抛出ConcurrentModificationException

  • 此外,您还在每次迭代中添加。这意味着列表将随着每次迭代而增长,循环将永远不会结束。首先,您应该删除对象,然后再次将其添加到相同的位置

    解决方案:
    publicstaticvoidexecute(){
    getListOfUsers();
    getListOfCustomers();
    
    对于(int i=0;i您试图做的是从列表中获取一个用户对象,然后再次将其添加到列表中。由于以下原因,它无法工作:

  • 您正在迭代列表并添加到不允许的同一循环中,并抛出ConcurrentModificationException

  • 此外,您还在每次迭代中添加。这意味着列表将随着每次迭代而增长,循环将永远不会结束。首先,您应该删除对象,然后再次将其添加到相同的位置

    解决方案:
    publicstaticvoidexecute(){
    getListOfUsers();
    getListOfCustomers();
    
    对于(int i=0;我必须这样做:list.add(u);我做错了。感谢您乐于帮助。如果答案对您有帮助,您应该对其进行投票,或者如果它解决了您的问题,您应该将其标记为正确。总之…happy coding…)我必须这样做:list.add(u);我做错了。谢谢你乐于帮助。如果答案对你有帮助,你应该投票表决,如果它解决了你的问题,你应该把它标记为正确。无论如何……快乐编码……)