EntityManager.find();

131
01 августа 2019, 08:30

Всем привет. Изучаю Hibernate. К примеру если я хочу из базы данных юзеров найти одного юзера по айди, то вопросов нету:

Client client = em.find(Client.class, id);

А если я хочу найти клиента по другим параметрам, к примеру одновременно по имени и номеру телефона?

Вот к примеру у меня есть сущность клиент

class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "name",nullable = false, length = 32)
private String name;
@Column(name = "number", nullable = false, unique = true)
private String number;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private Set<Account>accounts;
User(String name, String number) {
    this.name = name;
    this.number = number;
}

}

а теперь я хочу найти его с помощью ентити менеджера? Может создать мапу в которой будут параметры поиска? Но как тогда менеджер поймет по каким полям и как сравнивать?

 System.out.println("write your username");
    String username = scanner.nextLine();
    System.out.println("write your number");
    String number = scanner.nextLine();
    Map<String, Object> map= new HashMap<String, Object>();
    map.put("username", username);
    map.put("number", number);
    User user = entityManager.find(User.class, map);

Так вот, что делать? Или тогда создать запрос с которого вытянуть всех клиентов, а тогда перебрать по критериям?

Answer 1

Вытягивать всех клиентов можно, если у вас их меньше 100 например, да и то будет не оптимально: ни по скорости, ни по памяти.
Вы можете попробовать использовать Query, например:

TypedQuery<User> query = em.createQuery(
            "SELECT u FROM User u WHERE u.username = :username AND u.number = :number", User.class);
    User user = query.setParameter("username", username)
                         .setParameter("number", number)
                         .getSingleResult();

или

List<User> users = query.setParameter("username", username)
                                     .setParameter("number", number)
                                     .getResultList();
READ ALSO
Как сделать тоже самое но на java8

Как сделать тоже самое но на java8

Всем приветХочу разобраться со streamApi java 8

104
Как собрать JavaFX проект c Gradle или Maven в Intelij Idea?

Как собрать JavaFX проект c Gradle или Maven в Intelij Idea?

Пишу проект на JavaFX и Scene BuilderСтолкнулся с необходимостью собрать нормально проект

121
Не работает TranslateTransition в javafx

Не работает TranslateTransition в javafx

Я пытаюсь сделать анимацию открывания меню в javafx с помощью TranslateTransition, но почему то не выходитМне нужно что бы AnchorPane двигался вправо(по X) на 200 пикселей

128