Darmowy kurs wideo o JPA i Hibernate

22

Hej! Nagrałem ostatnio darmowy, 5-godzinny kurs o JPA i Hibernate. Kurs ma na celu przygotować osobę od absolutnego zera do poziomu, kiedy będzie ogarniała co to jest JPA i Hibernate, jak się tego używa i żeby (wspomagając się dokumentacją) potrafiła napisać własną aplikację z użyciem tej technologii.

Tu jest link do playlisty:

Pozdrawiam!

0

Brzydko pachnie nazywanie relacjami powiazania 1:n, n:m, etc.

0

Czasem podczas kursu mówię na kolumny "tabele" i jest to również bez znaczenia, bo każdy załapie o co chodzi, nie dostrzegając nawet przejęzyczenia. Jak ktoś oczekuje maksymalnej precyzji w nomenklaturze, to niech się uczy ze specyfikacji.

0

Witam,
właśnie zacząłem przerabiać kurs.. ogólnie pozytywna akcja :)

Ale mam pewien problem i nie mogę iść dalej..

Z racji tego, iż miałem postawioną już bazę PostgreSQL postanowiłem właśnie z niej korzystać .. (poza tym od pewnego czasu staram się unikać MySQL'a..)

Jestem akutalnie na 7 odcinku "Pierwsa encja" i przy próbie uruchomienia kodu z klasą Emploee otrzymuje informację:

Caused by: org.postgresql.util.PSQLException: BŁĄD: relacja "employee" nie istnieje Pozycja: 13

czyli wynika jakby z tego, że jest problem z automatycznym generowaniem tabeli.. Dla testu utworzyłem sobie samą tabelę (bez kolumn) i wtedy błąd 'zmienił' się na informację o braku odpowiednich kolumn.. (co jest logiczne..)

Co może być tutaj problemem ? (szukałem coś na w temacie konfiguracji pilku persitence.xml, ale mimo interwencji nadal mam to samo...

0

Adnotacja do posta wyżej..

persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
	version="2.0">

	<persistence-unit name="myDatabase" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>info_lb.jpa.domain.Employee</class>
		<properties>
			<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
			<property name="javax.persistence.jdbc.user" value="tutorial" />
			<property name="javax.persistence.jdbc.password" value="password" />
			<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/mojaBaza" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL9Dialect" />
			<property name="hibernate.hbn2ddl.auto" value="create" />

			<property name="show_sql" value="true" />
			<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false" />
		</properties>
	</persistence-unit>

</persistence>

//zacząłem już dodawać swoje adnotacje, ale nic nie pomogło..

package info_lb.jpa.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;


@Entity
@Table(name="employee")
public class Employee {
	@Id
	@Column(name = "id", updatable=false)
	private long id;
	private String firstName;
	private String lastName;
	private double salary;

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public double getSalary() {
		return salary;
	}

	public void setSalary(double salary) {
		this.salary = salary;
	}

}

0

Masz literówkę w property <property name="hibernate.hbm2ddl.auto" value="create" />. Powinno być hbm2ddl zamiast hbn2ddl

P.S. W Hibernate nie musisz w sposób jawny podawać wszystkich encji w <class>.

0

Wow, działa.. :) Dzięki! Taki błąd... szkoda, że tego jakoś nie podkreśla jak 'zwykły' kompilator .. bym się chyba zajechał a nie znalazł tego błędu.. :P

ps. Tą class'e to podałem w wyniku różnych prób uruchomienia tego.. (widziałem po prostu w jakimś temacie na stackoverflow, że komuś coś takiego pomogło..)

0

To dorzucę jeszcze jeden bonus: Żeby wykorzystać slf4j do logowania i otrzymać dużo bardziej szczegółowe logi musimy wykonać dwie rzeczy:

  1. Dodać w pom.xml zależność od slf4j
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-log4j12</artifactId>
	<version>1.6.1</version>
</dependency>
  1. Dodać plik log4j.properties w lokalizacji, gdzie znajdują się zasoby (czyli tam, gdzie mamy plik META-INF):
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
 
log4j.rootLogger=INFO, stdout
log4j.logger.org.hibernate=DEBUG
0

Planujesz jakieś dodatkowe tutoriale, np. Spring czy cos? :)

6

Tak, kolejny będzie Spring. Muszę tylko to pogodzić jakoś z pracą magisterską i musi mi komputer wrócić z gwarancji.

0
  1. Jakość (to będzie). Dlaczego nie w HD? w 360 wygląda to masakrycznie źle.
  2. Wygląda tak jak byś mówił to "na żywioł". Szczególnie potoczne słownicto ;)
  3. Wygląda Ok.
0
owca napisał(a):

Tak, kolejny będzie Spring. Muszę tylko to pogodzić jakoś z pracą magisterską i musi mi komputer wrócić z gwarancji.

fajny kurs, czekam na Springa :)

0

@owca jeśli mogę spytać to jak idą prace nad kursem Springa?

0

Niestety, ale stoi w miejscu. Dopiero co komputer przyszedł mi z gwarancji i w weekend go skonfigurowałem i przeniosłem wszystkie dane z backupu. Najbliższe 5 dni chcę jednak poświęcić na pisanie magisterki, bo ma ona wyższy priorytet. Pewnie w weekend uda mi się już coś nagrać.

0

Witam, jestem na 13 odcinku kursu, i pojawił się pewien problem. Przy uruchomieniu programu kiedy jeszcze tabele nie istnieją wyskakuje:

WARN: GenerationTarget encountered exception accepting command : Unable to execute command [alter table Employee drop foreign key FK5u3b0r7molgtbs8902divhplp]
org.hibernate.tool.schema.spi.CommandAcceptanceException: Unable to execute command [alter table Employee drop foreign key FK5u3b0r7molgtbs8902divhplp]
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:63)
at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlString(SchemaDropperImpl.java:370)
at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlStrings(SchemaDropperImpl.java:355)
at org.hibernate.tool.schema.internal.SchemaDropperImpl.applyConstraintDropping(SchemaDropperImpl.java:327)
at org.hibernate.tool.schema.internal.SchemaDropperImpl.dropFromMetadata(SchemaDropperImpl.java:229)
at org.hibernate.tool.schema.internal.SchemaDropperImpl.performDrop(SchemaDropperImpl.java:153)
at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:125)
at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:111)
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:137)
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:64)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:458)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:465)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:881)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at info.owczarek.jpa.Main.main(Main.java:14)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'mojabaza.employee' doesn't exist
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
at com.mysql.jdbc.Util.getInstance(Util.java:387)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:942)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3966)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2526)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2673)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2503)
at com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl.java:839)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:739)
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:51)
... 16 more

Mimo to, tabele zostają utworzone w bazie danych. Wie ktoś dlaczego tak się dzieje i co z tym można zrobić?

1 użytkowników online, w tym zalogowanych: 0, gości: 1