2014-10-14 3 views
1

У меня есть класс Java, как это:HashMap resultmap в mybatis

public class Team { 
private HashMap<String, User> users; 
private int id_team; 
private String nome; 
... 
} 

и файл XML так:

<resultMap id="userJoinTeamResultMap" type="Team"> 
    <id column="id_team" property="id_team" /> 
    <result column="nome" property="nome" /> 
    <collection property="users" javaType="HashMap" > 
     <id column="id_user" property="id" /> 
     <result column="nome_user" property="nome" /> 
     <result column="cognome" property="cognome" /> 
     <result column="email" property="email" /> 
    </collection> 
</resultMap> 

И отборное, что делает то, что он должен делать. Но когда я пытаюсь получить значения в моем HashMap:

ArrayList<Team> listaTeam = getBlmTeam().getUserTeamFromCorso(jsonInput.getInt("id_corso")); 
Iterator<Team> it = listaTeam.iterator(); 
while(it.hasNext()){ 
     Team t = it.next(); 
     Collection<String> set = t.getUsers().keySet(); 
     Iterator it2 = set.iterator(); 
     while(it2.hasNext()){ 
      Object k = it2.next(); 
      System.out.println("key:"+k.toString()+" value:"+t.getUsers().get(k)); 
}} 

Мои ценности:

key:id  value:103 
key:email value:HSXB736GB 
key:id  value:105 
key:email value:ZQFD4U 
.. 

Какие ключи ??? В первой команде есть два пользователя с ключами 102 и 103. Но каждый пользователь использует ключ «id», поэтому они перезаписываются.

+0

Что Utente класс? – ToYonos

+0

t.getUsers(). Get (k) - это «Пользователь», как он может печатать иногда 103 (id), иногда HSXB736GB (электронная почта?). Не могли бы вы показать нам исходный код пользователя? – ToYonos

+0

Я не знаю почему! Ключи и значения ошибочны. – Ciro

ответ

-1

я решил с помощью

private Arraylist<User> users; 

и

<collection property="users" javaType="ArrayList"> 
2

Вы не используете HashMap правильно. Вы не хотите, чтобы отобразить

id -> 103 
email -> HSXB736GB 

и т.д. Как вы обнаружили, если вы сделаете это, вы будете только в состоянии иметь одного пользователя в там, потому что ключ должен быть уникальным, поэтому, когда вы добавите нового пользователя, id будет перезаписан.

То, что вы хотите сделать, это отобразить идентификаторы пользовательских объектов

103 -> [user instance with ID 103] 
105 -> [user instance with ID 105] 

Это означает, что вместо HashMap<String,Utente> вы хотите HashMap<Integer,Utente>. После этого вы можете делать такие вещи, как

Utente someUser = ... 
map.put(someUser.getId(), someUser); 

, а затем вы будете иметь возможность получить пользователя от карты с

Utente someUser = map.get(id); 

до тех пор, как вы знаете идентификатор.

+0

Я изменил на целое число, но результат тот же. – Ciro

+0

Вам нужно сделать больше: вам также нужно изменить то, что вы используете в качестве ключа. Не используйте в качестве ключа '' id "': используйте сам идентификатор. –

+0

есть, спасибо. Моя проблема в том, как это сделать. Я думал, что мой ResultMap прав. – Ciro

Смежные вопросы