Hibernate = zapytania

advertisement
Odwzorowania relacyjno-obiektowe
Hibernate
uzupełnienie
Plan wykładu
•
•
•
•
•
2
Odwzorowania relacyjno-obiektowe
Dziedziczenie
Konfiguracja
Statystyki
MetaDane
Nazewnictwo
2
Odwzorowania relacyjno-obiektowe
Dziedziczenie (I)
• @Inheritance
• (strategy=InheritanceType.TABLE_PER_CLASS)
• (strategy=InheritanceType.JOINED)
• (strategy=InheritanceType.SINGLE_TABLE)
3
Odwzorowania relacyjno-obiektowe
4
Dziedziczenie (II)
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING,
name = "type")
public class Slownik
{
@Id
@SequenceGenerator(name = "Slownik_SEQUENCE", sequenceName =
"slownik_seq")
@GeneratedValue(generator = "Slownik_SEQUENCE")
private int id;
private String nazwa;
}
Odwzorowania relacyjno-obiektowe
Dziedziczenie (III)
@Entity
@DiscriminatorValue(”typProcesora")
public class TypProcesora extends Slownik {}
TypProcesora slownik = null;
if (slownikId == -1) slownik = new TypProcesora();
else slownik = (TypProcesora) slownikService.get(slownikId);
Slownik slownik = slownikService.get(slownikId);
5
Odwzorowania relacyjno-obiektowe
Dziedziczenie (IV) - TABLE_PER_CLASS
• Oddzielna tabela w bazie danych dla każdej klasy
dziedziczącej
• Mniejsze wykorzystanie pamięci w bazie danych
• Prostszy import danych, łatwiejsza administracja
bazą danych
• Niska efektywność zapytań
6
Odwzorowania relacyjno-obiektowe
Dziedziczenie (V) - SINGLE_TABLE
• Pojedyncza tabela w bazie danych dla wszystkich
klas dziedziczących
• Znaczna liczba pustych komórek w tabeli (kolumny
tabeli są sumą kolumn dla każdej klasy)
• Dodatkowa kolumna dtype z nazwa klasy
• Trudności w imporcie danych
• Wysoka efektywność zapytań
7
Odwzorowania relacyjno-obiektowe
8
Konfiguracja (I)
<prop key="hibernate. show_sql">true</prop>
hibernate.dialect =
org.hibernate.dialect.PostgreSQLDialect
hibernate.default_schema = example
hibernate.hbm2ddl.auto = update
hibernate.show_sql = false
hibernate.format_sql = false
8
Odwzorowania relacyjno-obiektowe
9
Konfiguracja (II)
hibernate.connection.isolation
hibernate.generate_statistics = true
hibernate.jdbc.batch_size 20
hibernate.default_batch_fetch_size
hibernate.cache.use_query_cache
hibernate.cache.use_second_level_cache
9
10
Odwzorowania relacyjno-obiektowe
Konfiguracja (III)
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=300
hibernate.c3p0.max_statements=50
hibernate.c3p0.idle_test_period=300
10
Odwzorowania relacyjno-obiektowe
11
Loging
log4j.logger.org.hibernate.tool.hbm2ddl = error
org.hibernate
org.hibernate.SQL
org.hibernate.type
org.hibernate.cache
org.hibernate.secure
org.hibernate.jdbc
org.hibernate.transaction
11
Odwzorowania relacyjno-obiektowe
Statystyka
• getHibernateTemplate().getSessionFactory()
.getStatistics()
•
•
•
•
isStatisticsEnabled()
getEntityLoadCount()
getTransactionCount()
getSuccessfulTransactionCount()
12
Odwzorowania relacyjno-obiektowe
MetaDane
ClassMetadata uMeta =
sessionfactory.getClassMetadata(Uzytkownik.class);
Object[] propertyValues =
uMeta.getPropertyValues(uzytkownik);
String[] propertyNames = uMeta.getPropertyNames();
Type[] propertyTypes = uMeta.getPropertyTypes();
13
Odwzorowania relacyjno-obiektowe
Naming Strategy (I)
public class MyNamingStartegy extends
DefaultNamingStrategy
{
@Override
public String classToTableName(String className)
{
return "kura_" +
super.classToTableName(className);
} ...
14
Odwzorowania relacyjno-obiektowe
Naming Strategy (II)
<bean id="naming"
class=”commons.MyNamingStartegy">
</bean>
<bean id="hibernateSessionFactory” ...>
...
<property name="namingStrategy"
ref ="naming"></property>
....
15
Odwzorowania relacyjno-obiektowe
batch-size
• Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Uzytkownik uzytkownik = new Uzytkownik(.....);
session.save(uzytkownik);
if ( i % 20 == 0 ) {
session.flush(); session.clear();
}} tx.commit(); session.close();
16
Odwzorowania relacyjno-obiektowe
First-level Cache
• getHibernateTemplate().evict(Object)
• getHibernateTemplate().clear()
17
Odwzorowania relacyjno-obiektowe
Second-level Cache
• getHibernateTemplate().getSessionFactory().evict
(Haslo.class); //deprecated
• getHibernateTemplate().getSessionFactory().evict
(Haslo.class,id); //deprecated
18
Odwzorowania relacyjno-obiektowe
Query cache
Query uzytkownikByImie =
session.createQuery("from Uzytkownik u where
u.imie = :imie");
uzytkownikByImie.setString(”Marek", imie);
uzytkownikByImie.setCacheable(true);
uzytkownikByName.setCacheRegion
("UzytkownikQueries")
19
Odwzorowania relacyjno-obiektowe
Exception
• DBCConnectionException - wskazuje błąd
komunikacji na poziomie JDBC
• SQLGrammarException - wskazuje problem z
gramatyką i składną polecenia SQL.
• ConstraintViolationException - naruszenie
integralności danych
• LockAcquisitionException - problem naruszenie
(nabycia) blokady
• GenericJDBCException - inne
20
Download