Изменение значения столбца, извлеченного из базы данных, перед его отображением на jsp в Hibernate - PullRequest
0 голосов
/ 10 ноября 2011

Я новичок в Hibernate Framework и работаю над очень простой структурой.

Сценарий:

У меня есть 2 таблицы, скажем, A и B. Столбец в A является внешним ключом вA и первичный ключ в B. Теперь я хочу изменить значение этого конкретного столбца в таблице A на соответствующее значение другого столбца в таблице B .... только для отображения в JSP, а не в самой базе данных.

Я хочу сделать это, потому что в таблице AI есть код, а в таблице BI - соответствующее значение, и я хочу отображать значение, а не код.

Как этого добиться?(может быть, Joins?)

Вот мой текущий код:

Hibernate Connection:

public class HibernateConnection {

private static final SessionFactory sessionFactory = buildSessionFactory();

private static SessionFactory buildSessionFactory() {
    try {
        // Create the SessionFactory from hibernate.cfg.xml
        return new AnnotationConfiguration().configure().buildSessionFactory();
    } catch (Throwable ex) {
        System.err.println("Initial SessionFactory creation failed." + ex);
        throw new ExceptionInInitializerError(ex);
    }
}

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}

} 

Класс, в котором выполняется запрос:

public class contactQuery {

public List<contactPersistence> list(String whereClause){
    Session session = HibernateConnection.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    List<contactPersistence> contactList = null;
    try {
        contactList = (List<contactPersistence>) session.createQuery(" from contactPersistence " + whereClause).list();
        session.getTransaction().commit();

    } catch (HibernateException e) {
        System.out.println(e.getMessage());
        session.getTransaction().rollback();

    }
    return contactList;
}

}

Класс сохраняемости:

@Entity
@Table(name="Contacts")

public class contactPersistence implements Serializable{

private static final long serialVersionUID = -8767337896773261247L;

private String Contact_Code;
private String Name;
private String Customer_Code;
//other columns//

@Id
@GeneratedValue

@Column (name="Job_Title")
public String getJob_Title() {
    return Job_Title;
}

public void setJob_Title(String Job_Title) {
    this.Job_Title = Job_Title;
}
....
....
//other columns defined similarly
....
....

}

Здесь я хочу заменить customer_code на имя клиента из другой таблицы.Я попытался изменить значение в классе постоянства (в методе установки столбца), но это изменяет значение в самой базе данных с помощью команды обновления.Это не то, чего я хочу.

Любые предложения приветствуются.

И я предоставил информацию, которая, по моему мнению, будет достаточной, если это не так, пожалуйста, прокомментируйте. РЕДАКТИРОВАТЬ:

Это JSP, где я отображаю данные:

    <s:iterator value="contactDetail" var="contactTable">
        <tr>
            <td><s:property value="Name"/></td>
            <td><s:property value="Job_Title"/></td>
            <td><s:property value="Email"/></td>
            <td><s:property value="Phone"/></td>
            <td><s:property value="Mobile"/></td>
            <td><s:property value="Fax"/></td>
            <td><s:property value="Address"/></td>
            <td><s:property value="Notes"/></td>
        </tr>
    </s:iterator>

contactDetail и contactTable происходят из класса действия:

private List<contactPersistence> contactDetail;

public List<contactPersistence> getContactDetail() {
    return contactDetail;
}

public void setContactDetail(List<contactPersistence> contactDetail) {
    this.contactDetail = contactDetail;
}

private String contactTable;

public String getContactTable() {
    return contactTable;
}

public void setContactTable(String contactTable) {
    this.contactTable = contactTable;
}

private contactQuery contactQuery;

///////////////////contact detail is populated here//////////
this.contactDetail=contactQuery.list(deWhereClause);

Ответы [ 2 ]

3 голосов
/ 10 ноября 2011

Ничего себе. Вы неправильно поняли две вещи.

  1. Если поле должно содержать код, пусть оно содержит код, а не имя. Такая обработка ваших полей приведет к нечитаемому и не поддерживаемому коду. Если getCode () возвращает имя, getName () возвращает адрес, а getAddress () возвращает номер телефона, вы и ваши коллеги быстро потеряете все свои волосы.

  2. У контакта не должно быть поля customerCode типа String. Оно должно иметь поле customer типа Customer, где Customer - это объект Hibernate, представляющий клиента. Это называется ассоциацией. Если у клиента несколько контактов, это ассоциация ManyToOne. Если он есть, это ассоциация OneToOne. Таким образом, чтобы получить имя клиента, вы просто должны использовать contact.getCustomer().getName().

Вы должны прочитать справочное руководство Hibernate .

Примечание: не соблюдая соглашений об именах Java затрудняет чтение кода. Имена классов должны начинаться с заглавной буквы, а переменные и метод должны быть строчными. Ни один из них не должен содержать подчеркивания (пример: ContactPersistence, jobTitle)

0 голосов
/ 18 ноября 2011

Для тех, кто все еще сталкивается с такой же проблемой, вот ссылка, которая помогла от начала и до конца по ассоциациям.

http://levelup.lishman.com/hibernate/getting-started/index.php

Это хорошая «пошаговая» статья для начинающих.

Затем вы можете перейти к справочному руководству гибернации для получения более подробной информации. (Это то, что я сделал !!)

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