object->tabelleneintrag wann gibts einen neuen, wann wird ein alter überschrieben, "sequence" table?

dermoritz

Bekanntes Mitglied
ich mache gerade meine ersten erfahrungen mit javaee nd mit jpa im speziellen. nun bin ich im buch "Beginning Java™ EE 6 Platform with GlassFish™ 3: From Novice to Professional" in kapitel 2. dort geht es um ein programm was ein "book" anlegt und in eine db schreibt. das buch sieht so aus:

Java:
	@Id @GeneratedValue
	private Long id;
	@Column(nullable=false)
	private String title;
	private Float price;
	@Column(length=200)
	private String description;
	private String isbn;
	private Integer nbOfPage;
	private Boolean illustrations;

also wenn man das programm ausführt hat man einen eintrag in der buchtabelle (das buch wird in main angelegt). 2 Fragen hab ich nun:
1. die mainklasse überschreibt immer wieder das eine buch - wieso wird nicht jedesmal ein neues buch angelegt? woher weiß das system das es sich um das selbe buch handelt - durch den variablennamen? oder andersherum: was muss ich machen, damit bei jedem ausführen der main-klasse ein neues buch angelegt wird?

2. was hat es mit der "sequence"-tabelle auf sich? laut buch verwaltet die irgendwie die auto-gen.-id's?! aber jedesmal wenn ich das programm ausführe gibts nen error, dass die tabelle schon existiert:
Code:
Internal Exception: java.sql.SQLException: Table/View 'SEQUENCE' ist bereits in
Schema 'APP' vorhanden.
Error Code: -1
Call: CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT DECIMAL(15), PRIMARY KEY (SEQ_NAME))
Query: DataModifyQuery(sql="CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT DECIMAL(15), RIMARY KEY (SEQ_NAME))")

kann man den error verhindern? oder kann man ihn ignorieren?
 
M

maki

Gast
1. equals & hashcode
2. In der Sequence Tabelle werden IDs abgelegt, wenn eine Tabelle bereits existiert und nochmals angelegt werden soll, gibt es einen Fehler.
 

dermoritz

Bekanntes Mitglied
1. versteh ich nicht, wann sind denn 2 objekte gleich? irgendwelche attribute ändern hilft jedenfalls nix.
2. genau was da steh weiß ich ja. nur warum wird bei jedem ausführen eine neue sequece tabelle angelegt? kann man /sollte man das verhindern?

um mal meine fragen zu 1. zu präzisieren:

wie ist die standardimplementierung von equals und hashcode -> kann man mehrere bücher ohne überschreiben dieser methoden anlegen?
 
Zuletzt bearbeitet:
M

maki

Gast
wie ist die standardimplementierung von equals und hashcode -> kann man mehrere bücher ohne überschreiben dieser methoden anlegen?
Ja, denn die Standardimplementierung (aus Object) prüft nur auf referentielle Gleichheit.
 

dermoritz

Bekanntes Mitglied
ok 1. hat sich geklärt: ich war etwas verwirrt, denn ich konnte nicht mehrere bücher eintragen - das lag aber nur daran, dass in der persistence.xml stand:
Code:
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>

es wurde also immer eine neue büchertabelle angelegt und ich wundere mich wieso jpa meint das es immer dasselbe buch ist - das wäre eben eine sehr eigenartige implementierung von equals().
mit "create-tables" funktioniert es - nur wird natürlich nun auch rumgeheult, dass es die büchertabelle schon gibt. den eintrag kann man eigentlich auch rauslassen oder?
was mich auch wundert, ist das der "persistence xml editor" in eclipse (ist glaub teil von dali plugin?!) keinerlei unterstützung bietet - der unterschied zum standard xml editor ist, dass es kein "design"-reiter mehr gibt?! -ist das normal?
(mich würde nämlich intersssieren was es bei den einzelnen properties für optionen gibt) - ohne mir die datei mit net-beans anschauen zu müssen
 
Zuletzt bearbeitet:

Ähnliche Java Themen


Oben