Mit EJB3 auf eine Informix Datenbank zugreifen

Germu

Mitglied
Hallo zusammen,

hab folgendes Problem, ich soll auf eine bereits vorhandene Informix Datenbank mit einem Entity Bean zugreifen ohne dabei jede Spalte der Tabelle zu verwenden.
Beispiel:
Ich habe einen Kundentabelle mit 10 Spalten ich brauch aber in meinem Entity Bean nur die ID, Kundennamen und den Ort. Hab mein Entity wie folgt angelegt:

Code:
@Entity
@Table(name="kunden")
public class Kunden {
	
	private int kund_id;
	private String kund_kundenname; 
	private String kund_ort; 
	
	@Id
	@Column(name="kund_id")
	public int getKund_id() {return this.kund_id;}
	public void setKund_id(int kund_id ) {this.kund_id = kund_id;}
	
	@Column(name="kund_kundenname")
	public String getKund_kundenname() {return this.kund_kundenname;}
	public void setKund_kundenname(String kund_kundenname) {this.kund_kundenname = kund_kundenname;}
	
	@Column(name="kund_ort")
	public String getKund_ort() {return this.kund_ort;}
	public void setKund_ort(String kund_ort) {this.kund_ort = kund_ort;}
}

Wen ich das Bean deploye bekomm ich diese Fehlermeldung:

Code:
09:05:10,625 ERROR [SchemaUpdate] Unsuccessful: create table kunden (kund_id integer not null, kund_kundenname varchar(255), kund_ort varchar(255), primary key (kund_id))
09:05:10,625 ERROR [SchemaUpdate] Table (kunden) already exists in database.

Ich denke das es an den Attributen liegt da im vorhanden Datenbank Schema zb der Kundenname char(30) ist und nicht varchar(255) den er aber automatisch anlegt.

Hoffe mir kann jemand helfen.

grüsse
Germu
 
Hallo!

Also ich würde sagen, die EJB 3.0 Laufzeit würde gerne für die von dir definierte EntityBean eine neue Datenbanktabelle anlegen. Das geht aber in diesem Fall nicht, da eine Tabelle mit dem Namen (Kunden) schon existiert...
Welchen Application Server verwendest du denn? Je nach App Server solltest du irgendwo das Verhalten beim SchemaUpdate einstellen (oder das Teil ganz deaktivieren) können.
Manchmal heißt die Einstellung auch alter-table ... einfach mal danach suchen.

Gruß Tom
 
Hallo!

In JBoss 4.x ist der EntityManager über Hibernate Implementiert.
In der Hibernate Spezifischen Konfigurationsdatei kannst du dann mit dem Parameter
hibernate.hbm2ddl.auto das Verhalten beim Schemaupdate beeinflussen:
Automatically validate or export schema DDL to the database when the SessionFactory is created. With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly.

eg. validate | update | create | create-drop
http://www.hibernate.org/hib_docs/v3/reference/en/html/session-configuration.html

Gruß Tom
 
Da hab ich "update" angegeben. Mit "create-drop" löscht er ja die Tabelle und legt sie neu an. Die anderen Beiden Parameter hab ich noch nicht getestet.

grüsse
Germu
 
So wie ich das verstanden habe soll ich in der persistence.xml diese Parameter angeben. Hab das wie folgt gemacht:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<persistence>
   <persistence-unit name="kundenzeugsss">
	<jta-data-source>java:/InformixDS</jta-data-source>
	<properties>
		<property name="hibernate.hbm2ddl.auto" value="update"/>
	</properties>
	</persistence-unit>
</persistence>

Mit keinen der 4 Parameter schaff ich es das das Entity Bean auf die vorhandene Datenbanktabelle zugreift.

grüsse
Germu
 
hallo forum!

ich bin auf diesem gebiet leider ein vollkommener neuling, fand aber im netz für die definition der länge einer tabellenspalte welche text enthält, folgendes:

@Column(length=255)

vielleicht liegt es ja daran das der applikationsserver mehr informationen zum db-design der einzelnen (text-)felder benötigt? wie sieht eigentlich die db aus, wenn du sie mit ejb3 neu erstellen würdest, also nicht auf eine bestehende db zugreifst?
 
Zurück