更改从数据库中获取的列的值,然后在Hibernate中的jsp上显示它

时间:2011-11-10 11:29:37

标签: sql hibernate hibernate-mapping

我是hibernate框架的新手,正在开发一个非常简单的结构。

情景:

我有2个表,比如A和B. A中的列是A中的外键,B中是主键。 现在我想将表A中该特定列的值更改为表B中另一列的对应值....仅用于在JSP中显示而不是实际在db本身中。

我想这样做,因为在表A中我有一个代码,在表B中我有相应的值,我想显示值而不是代码。

我怎样才能做到这一点? (也许加入?)

这是我目前的代码:

休眠连接:

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替换为另一个表中客户的名称。 我尝试更改持久化类中的值(在列的setter方法中)但是通过update命令更改db本身的值。那不是我想要的。

欢迎提出任何建议。

我提供了我认为足够的信息,如果不是,请发表评论。

修改

这是我显示数据的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 个答案:

答案 0 :(得分:3)

哇。你有两件事是错的。

  1. 如果该字段应该包含代码,请让它保存代码,而不是名称。像这样处理你的字段将导致无法读取和不可维护的代码。如果getCode()返回名称,getName()返回地址,getAddress()返回电话号码,你和你的同事将很快失去所有的头发。

  2. 联系人不应包含customerCode类型的字段String。它应该有customer类型的字段Customer,其中Customer是代表客户的Hibernate实体。这称为关联。如果客户有多个联系人,则它是ManyToOne关联。如果只有一个,那就是OneToOne协会。这样,要获取客户的名称,您只需使用contact.getCustomer().getName()

  3. 您应该阅读Hibernate reference manual

    附注:不尊重Java naming conventions会使您的代码难以阅读。类名必须以大写字母开头,变量和方法必须以小写字母开头。它们都不应包含下划线(例如:ContactPersistence,jobTitle)

答案 1 :(得分:0)

对于仍然遇到同样问题的人来说,这是从开始到结束协助的链接。

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

对于初学者来说这是一篇很好的“一步一步”的文章。

然后,您可以转到休眠参考手册以获取更多详细信息。 (这就是我做的!!)