使用Java的Hibernate和Postgresql 9.0

时间:2011-03-18 20:36:51

标签: hibernate postgresql jpa

我有一个应用程序,它使用hibernat创建的实体收集了一些数据,其余的是使用简单的jdbc数据库连接和sql语句收集的。储蓄也是一样的。我最近将数据库从Postgresql 8.4升级到Postgresql 9.0,并注意到随实体收集的所有数据都不再显示。我可以使用entites保存数据,但无法显示相同的数据。

我升级到Hibernate 3.6.2没有修复,我也从postgresql 9.0-801更新到最新的JDBC3驱动程序。这些都没有解决这个问题。

这是一个有效的实体。自数据库升级以来,我没有改变。

package com.ajrs.entities;

import java.io.Serializable;
import javax.persistence.*;  
import static javax.persistence.GenerationType.*;

@Entity
@Table(name="lk_note_category")
@NamedQueries({
@NamedQuery(
name="LkNoteCategory.getAll",
        query="SELECT l FROM LkNoteCategory l"
        )
})

public class LkNoteCategory implements Serializable {

@Id
private String category;    
private String description;
private boolean default_category;    

public String getCategory() {
    return category;
}

public void setCategory(String category) {
    this.category = category;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public boolean isDefault_category() {
    return default_category;
}

public void setDefault_category(boolean default_category) {
    this.default_category = default_category;
}

}

所以我用以下内容创建了音符类别对象:

noteCategories = em.createNamedQuery("LkNoteCategory.getAll").getResultList();

那个加载并根据我的netbeans调试器得到所有类别。

这是一个无效的实体。

enter code herepackage com.ajrs.entities;

import java.io.Serializable;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import static javax.persistence.CascadeType.*;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.*;
import javax.persistence.NamedNativeQuery;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.SequenceGenerator;
import javax.persistence.Transient;

@Entity
@NamedQueries({
@NamedQuery(
name="Note.oldgetByClaimNo",
        query="select n from Note n where n.claimNo = :claim_no order by n.created"
        ),
        @NamedQuery(
name="Note.getByCategoryAndSubcategory",
        query="select n from Note n where n.claimNo = :claim_no and n.category = :category and n.subcategory = :subcategory order by n.created"
        )
})
@NamedNativeQuery(name="Note.getByClaimNo",
query=
    "select claim_no, userid, date, note, category, subcategory, note_id from "+
    "(      select 1 as ord1, extract (epoch from date) as ord2, claim_no, userid, date, note, category, subcategory, note_id "+
    "       from note " +
    "       where claim_no = :claim_no "+
    "       and(subcategory is null or category != 'VI') " +
    "       and date <= (select coalesce(min(date),'1/1/3999') " +
    "                    from note n2 " +
    "                    where n2.claim_no = note.claim_no " +
    "                      and (n2.subcategory is not null " +
    "                           and n2.category = 'VI')" +
    "                          ) "+
    "       union "+
    "       select 2 as ord1, sort_order as ord2, claim_no, userid, date, note, category, subcategory, note_id " +
    "       from(select note.*, sort_order " +
    "                from note inner join lk_note_subcategory using(subcategory) "+
    "                where claim_no = :claim_no "+
    "               and (note.subcategory is not null and " +
    "                        note.category = 'VI') "+
    "               ) as foo " +
    "       union " +
    "       select 3 as ord1, extract (epoch from date) as ord2, claim_no, userid, date, note, category, subcategory, note_id "+
    "       from note " +
    "       where claim_no = :claim_no "+
    "       and(subcategory is null or category != 'VI') " +
    "       and date > (select coalesce(min(date),'1/1/3999') " +
    "                    from note n2 " +
    "                    where n2.claim_no = note.claim_no " +
    "                      and (n2.subcategory is not null " +
    "                           and n2.category = 'VI')" +
    "                          ) "+
    ") as dummy " +
    "order by ord1, ord2"
    , resultClass=Note.class)


    public class Note implements Serializable {
public static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=SEQUENCE, generator="NOTE_SEQUENCE_GENERATOR")
@SequenceGenerator(name="NOTE_SEQUENCE_GENERATOR", sequenceName="NOTE_NOTE_ID_SEQ")
private int note_id;

private String note;
private String userid;
@Column(name="claim_no")
private String claimNo;
@Column(name="date")
private Timestamp created;
private String category = "";
private String subcategory;

/* Transient properties */
@Transient
private boolean updated = false;

public String getUser() {
    return userid; }

public void setUser(String u) {
    userid = u;}

public String getNote() {
    return note; }

public void setNote(String n) {
    note = n; }

public String getClaimNo() {
    return claimNo; }

public void setClaimNo(String c) {
    claimNo = c; }

public Timestamp getTimestamp() {
    return created;
}
public void setTimestamp(Timestamp timestamp) {
    this.created = timestamp;
}

public String getCategory() {
    return category;
}

public void setCategory(String category) {
    this.category = category;
}

public String getSubcategory() {
    return subcategory;
}

public void setSubcategory(String subcategory) {
    this.subcategory = subcategory;
}

public boolean isUpdated() {
    return updated;
}

public void setUpdated(boolean updated) {
    this.updated = updated;
}

@PrePersist
@PreUpdate
private void fillDate() {
    setTimestamp(new Timestamp(System.currentTimeMillis()));
}

}

在这个不起作用的实体上,我使用以下内容来创建它。

currentNotesArray = em.createNamedQuery("Note.getByClaimNo").
            setParameter("claim_no", claimNumber).getResultList();

然后我用调试器查看这个ArrayList,它是Null,我在其他阶段看到它也是一个大小为0的ArrayList。

任何人都有任何想法,为什么会这样。我很难过。

捐赠

1 个答案:

答案 0 :(得分:0)

我想出了这个。简单的傻错。我一直在使用我的开发数据库来处理通过简单数据库连接收集的所有数据,虽然我没有将persistence.xml更改为dev数据库。一旦我这样做,显示数据没有问题。