Hibernate получить запись по свойству не будет работать - PullRequest
0 голосов
/ 12 мая 2018

Первый пост здесь, так что извините, если я неправильно отформатировал и вызвал другие проблемы: D.Пожалуйста, помилуй.Итак, мы изучаем самые основы hibernate в университете и просим сделать методы отображения и sql-ish интерфейса командной строки самостоятельно.Нам были предоставлены временные методы, и мы должны были отредактировать их, чтобы сделать их постоянными.Теперь интерфейс командной строки попросит вас ввести логин и пароль любого агента недвижимости и вернет некоторую строку, если вы ошибетесь (неверный пароль для имени пользователя), и позволит вам перейти на более глубокий уровень интерфейса, если вы введете правильное имя пользователя и пароль.Обратите внимание, что университет предоставил код для commandlineInterface, поэтому я предполагаю, что он правильный.Также я протестировал временную версию, которая работала.

Этот метод кажется некорректным, но я не знаю, почему

public EstateAgent getEstateAgentByLogin(String login) {

    Session session = sessionFactory.openSession();
    Transaction tx = null;

    try{
        tx = session.beginTransaction();
        EstateAgent p = (EstateAgent) session.get(EstateAgent.class, login);
        tx.commit();
        return p;
    }catch(HibernateException e){
        if(tx!=null) tx.rollback();
        e.printStackTrace();
    }finally{
        session.close();
    }
    return null;
}

У меня также есть метод для добавления EstateAgent вбаза данных.

public void addEstateAgent(EstateAgent ea) {
    //estateAgents.add(ea); transient
    Session session = sessionFactory.openSession();
    Transaction tx = null;
    try{
        tx = session.beginTransaction();
        EstateAgent estateagent = ea;
        session.save(estateagent);
        tx.commit();
    } catch(HibernateException e){
        if(tx!=null) tx.rollback();
        e.printStackTrace();
    }   finally{
        session.close();
    }
}

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

public void addTestData() {
    EstateAgent m = new EstateAgent();
    m.setName("Gary Oak");
    m.setAddress("test");
    m.setLogin("gary");
    m.setPassword("oak");
    this.addEstateAgent(m);
    }

его Hibernate 3.0 afaik

Hibernate для EstateAgent

и для класса сущностей

 package de.dis2018.data;

 import java.util.Set;

 import de.dis2018.util.Helper;


public class EstateAgent {
private int id;
private String name;
private String address;
private String login;
private String password;
static int currentId = 0;
private Set<Estate> estates;

public EstateAgent() {
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

public String getLogin() {
    return login;
}

public void setLogin(String login) {
    this.login = login;
}

public String getPassword() {
    return password;
}

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

public Set<Estate> getEstates() {
    return estates;
}

public void setEstates(Set<Estate> estates) {
    this.estates = estates;
}

public int hashCode() {
    final int prime = 31;
    int result = 1;

    result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
    result = prime * result + ((getAddress() == null) ? 0 : getAddress().hashCode());
    result = prime * result + ((getLogin() == null) ? 0 : getLogin().hashCode());
    result = prime * result + ((getPassword() == null) ? 0 : getPassword().hashCode());

    return result;
}

public boolean equals(Object obj) {
    if (this == obj)
        return true;

    if (obj == null || !(obj instanceof EstateAgent))
        return false;

    EstateAgent other = (EstateAgent)obj;

    if(other.getId() != getId() ||
            !Helper.compareObjects(getName(), other.getName()) ||
            !Helper.compareObjects(getAddress(), other.getAddress()) ||
            !Helper.compareObjects(getLogin(), other.getLogin()) ||
            !Helper.compareObjects(getPassword(), other.getPassword()))
    {
        return false;
    }

    return true;
}

}

Я вижу запись в базе данных.(этот метод выполняется каждый раз, когда вы запускаете приложение Java после удаления и создания таблиц) Любая идея, где я ошибаюсь?Скажите, пожалуйста, если вам нужна дополнительная информация

1 Ответ

0 голосов
EstateAgent p = (EstateAgent) session.get(EstateAgent.class, login);

Метод get сеанса возвращает вашу сущность класса из первого параметра с идентификатором из второго.Как я вижу, у вас есть поле id, но логин не тот.Чтобы получить запись с некоторым свойством, вы должны искать Criteria API (но я не люблю использовать его для таких простых запросов) или просто написать ее на JPQL.

(EstateAgent) session.createQuery("SELECT ea FROM EstateAgent WHERE ea.login:=login").setParameter("login", login).getSingleResult();

Я думаю, что это сделает работу. Помните, что метод getSingleResult() будет генерировать исключения, если существует 0 или более одной записи с таким логином.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...