Ausnahme: Bezug nicht vorhanden ist mit dem postgresql-Tabelle / - Sequenz in ejb3
Ich habe Fehler werden bei der Verwendung von ejb3-und Postgres-Daten einzufügen. Aber mit raw-SQL geht es gut.
Meinem Tisch ist:
CREATE SEQUENCE vmb_mails_seq;
CREATE TABLE vmb_mails (
ID BIGINT DEFAULT nextval('vmb_mails_seq') PRIMARY KEY,
TITLE TEXT ,
FROM_ADDR VARCHAR(256),
DATE_ARRIVED TIMESTAMP,
BODY TEXT,
ENT_BY NUMERIC(20,0),
IS_DELETED NUMERIC(1,0),
DELETE_DATE TIMESTAMP,
MOD_BY NUMERIC(20,0),
IS_ACTIVE NUMERIC(1,0),
ENT_DATE TIMESTAMP,
MOD_DATE TIMESTAMP,
REACTIVE_DATE TIMESTAMP,
INACTIVE_DATE TIMESTAMP
);
ALTER SEQUENCE vmb_mails_seq OWNED BY vmb_mails.id;
ejb3
Person ist:
@Entity
@Table(name="vmb_mails")
@SequenceGenerator(name="Mails_Seq_Gen",sequenceName="vmb_mails_seq",allocationSize=1)
public class Mail implements Serializable
{
private long id;
private String title;
private String fromAddr;
private Date dateArrived;
// private Clob body;
private String body;
private long entBy;
private int isDeleted;
private Date deleteDate;
private long modBy;
private int isActive;
private Date entDate;
private Date modDate;
private Date reActiveDate;
private Date inActiveDate;
public Mail()
{
}
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="Mails_Seq_Gen")
@Column(name="ID")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Column(name="TITLE")
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Column(name="FROM_ADDR")
public String getFromAddr() {
return fromAddr;
}
public void setFromAddr(String fromAddr) {
this.fromAddr = fromAddr;
}
@Column(name="DATE_ARRIVED")
@Temporal(TemporalType.TIMESTAMP)
public Date getDateArrived() {
return dateArrived;
}
public void setDateArrived(Date dateArrived) {
this.dateArrived = dateArrived;
}
@Column(name="BODY")
public String getBody()
{
return body;
}
public void setBody(String body)
{
this.body = body;
}
/*public Clob getBody() {
return body;
}
public void setBody(Clob body) {
this.body = body;
}*/
@Column(name="ENT_BY")
public long getEntBy() {
return entBy;
}
public void setEntBy(long entBy) {
this.entBy = entBy;
}
@Column(name="IS_DELETED")
public int getIsDeleted() {
return isDeleted;
}
public void setIsDeleted(int isDeleted) {
this.isDeleted = isDeleted;
}
@Column(name="DELETE_DATE")
@Temporal(TemporalType.TIMESTAMP)
public Date getDeleteDate() {
return deleteDate;
}
public void setDeleteDate(Date deleteDate) {
this.deleteDate = deleteDate;
}
@Column(name="MOD_BY")
public long getModBy() {
return modBy;
}
public void setModBy(long modBy) {
this.modBy = modBy;
}
@Column(name="IS_ACTIVE")
public int getIsActive() {
return isActive;
}
public void setIsActive(int isActive) {
this.isActive = isActive;
}
@Column(name="ENT_DATE")
@Temporal(TemporalType.TIMESTAMP)
public Date getEntDate() {
return entDate;
}
public void setEntDate(Date entDate) {
this.entDate = entDate;
}
@Column(name="MOD_DATE")
@Temporal(TemporalType.TIMESTAMP)
public Date getModDate() {
return modDate;
}
public void setModDate(Date modDate) {
this.modDate = modDate;
}
@Column(name="REACTIVE_DATE")
@Temporal(TemporalType.TIMESTAMP)
public Date getReActiveDate() {
return reActiveDate;
}
public void setReActiveDate(Date reActiveDate) {
this.reActiveDate = reActiveDate;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name="INACTIVE_DATE")
public Date getInActiveDate() {
return inActiveDate;
}
public void setInActiveDate(Date inActiveDate) {
this.inActiveDate = inActiveDate;
}
}
Beim Aufruf entitmanager.persist(mail)
bekomme ich diesen Fehler:
in java.lang.Thread.run(Thread.java:662), Verursacht durch: Ausnahme
[EclipseLink-4002] (Eclipse Persistence Services -
2.3.0.v20110604-r9504): org.eclipse.die Persistenz.Ausnahmen.DatabaseException Internal
Ausnahme: org.postgresql.util.PSQLException: FEHLER: relation
"vmb_mails_seq" existiert nicht Position: 16-Fehler Code: 0 Aufruf:
select nextval('vmb_mails_seq') Abfrage: ValueReadQuery(sql="select
nextval('vmb_mails_seq')")
bei org.eclipse.die Persistenz.Ausnahmen.DatabaseException.sqlException(DatabaseException.java:333)
bei org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:644)
InformationsquelleAutor App Work | 2012-07-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie vereinfachen Ihre DDL-Skript mit der Verwendung eines
serial
- Datentyp.bigserial
in Ihrem Fall:Dieser erstellt eine Sequenz mit dem Namen
vmb_mails_id_seq
automatisch.Beachten Sie auch, dass die Rechte auf Sequenzen müssen separat belegt werden.
Erstreckt sich nicht auf die Sequenz. Zusätzlich benötigen Sie:
Jedoch die Fehlermeldung, die sagt:
Und das hat eine andere Ursache. Hast du eigentlich überprüfen, ob die Sequenz da ist? In der richtigen Datenbank auf den richtigen port und das richtige schema?
Vielen Dank für Ihre Antwort,Es funktioniert in windows , und arbeitete auch im centos. aber jetzt funktioniert nicht im centos. der gleiche code. Ich habe in der squences da sind , ersetzte ich die Sequenz auf Seriell. Aber jetzt es sagt, dass die relation (Tabelle) VMB_MAILS nicht verlassen. Ich kann nicht herausfinden, was kann das problem sein.....
VMB_MAILS? Wenn Sie in doppelte Anführungszeichen Bezeichner in der Schöpfung, Sie sind case-sensitive, und Sie müssen schreiben Sie den gleichen doppelten Anführungszeichen Weg. Sonst, alle Bezeichner werden umgewandelt in Kleinbuchstaben. Sie wissen das, Recht?
Brandstetter, ich hatte genau das gleiche problem jetzt in meine db. Zuerst erstellte ich Folge via pgAdmin versuchte dann wählen Sie die neu erstellte Sequenz, und natürlich fehlgeschlagen. Nach der Lektüre Ihr Kommentar, ich habe versucht, so etwas wie { select nextval('"SEQ_REVISION_NUMBER"') } (beachten Sie die doppelten Anführungszeichen innerhalb von einfachen Anführungszeichen), und es funktionierte!
Schön. 🙂 Es ist mein ständige Beratung, nur ohne Anführungszeichen Kleinbuchstaben in Postgres. Macht Ihr Leben einfacher.
InformationsquelleAutor Erwin Brandstetter