1.1.14.7.4. fejezet, Hibernate jegyzetek
@ManyToMany examples
//Example 1: //In Customer class: @ManyToMany @JoinTable(name="CUST_PHONES") public Set<PhoneNumber> getPhones() { return phones; } // In PhoneNumber class: @ManyToMany(mappedBy="phones") public Set<Customer> getCustomers() { return customers; } //Example 2: // In Customer class: @ManyToMany(targetEntity=com.example.PhoneNumber.class) public Set getPhones() { return phones; } // In PhoneNumber class: @ManyToMany(targetEntity=com.example.Customer.class, mappedBy="phones") public Set getCustomers() { return customers; } //Example 3: // In Customer class: @ManyToMany @JoinTable(name="CUST_PHONE", joinColumns= @JoinColumn(name="CUST_ID", referencedColumnName="ID"), inverseJoinColumns= @JoinColumn(name="PHONE_ID", referencedColumnName="ID") ) public Set<PhoneNumber> getPhones() { return phones; } // In PhoneNumberClass: @ManyToMany(mappedBy="phones") public Set<Customer> getCustomers() { return customers; }
NamedQuery
Előre parszolt lekérdezéseket alkalmazhatunk az adatok hatékonyabb lekérdezéséhez, ha nevesített sablon leválogatókat használunk ott, ahol tudunk.
@NamedQueries({ @NamedQuery( name = "imageByUser", query = "from Image i where i.user = :user" ), @NamedQuery( name = "imageByCategory", query = "from Image i where i.category = :category" ) }) @Entity public class Image implements Serializable { ... }
Ezek után a lekérdezés használata a következő (figyeljük meg, hogy egy teljes objektumot kell átadni paraméterként):
query = getSession(false).getNamedQuery("imageByCategory"); query.setParameter("category", categoryFilter);
Nagy méretű adatok kezelése
Különböző adatbázis szerverekhez illeszkedő Hibernate-el nem is olyan könnyű megtalálni a helyes adattárolási formát, ha azt szeretnénk, hogy többféle adatbázison fusson programunk. Néhány tipusnál az alábbiakat használhatjuk eredményesen:
@Lob private String valamiProperty; //MySQL 5.5.20 : largeText //Oracle 11g : CLOB //PostgreSQL 9.1 : text //MS-SQL 2008 : varchar(MAX) @Lob private byte[] valamiProperty; //BLOB
Idegen kulcsok kezelése
MS-SQL 2008-al a perzisztens objektumokhoz tartozó táblák eldobása és létrehozása nem tökéletes. Az idegen kulcsok eldobása előtt a táblát dobná el a szerver, de mivel idegen kulcs hivatkozik rá, ezért sikertelen a kísérlet. Kézzel kell összeállítani egy szkriptet, ami elvégzi a piszkos munkát.
MySQL-ben az idegen kulcsok eldobása:
ALTER TABLE child DROP FOREIGN KEY parentid_fk;
Sorba rendezés
MySQL 5.5.20, Oracle 11g és MS-SQL a betűk sorba rendezésénél ezt a sorrendet állapítja meg: A,a,Á,á, ...
PostgreSQL 9.1-nél megelőzi a kisbetű a nagybetűt.
Dialektusok
RDBMS | Dialect |
---|---|
DB2 | org.hibernate.dialect.DB2Dialect |
DB2 AS/400 | org.hibernate.dialect.DB2400Dialect |
DB2 OS390 | org.hibernate.dialect.DB2390Dialect |
PostgreSQL | org.hibernate.dialect.PostgreSQLDialect |
MySQL | org.hibernate.dialect.MySQLDialect |
MySQL with InnoDB | org.hibernate.dialect.MySQLInnoDBDialect |
MySQL with MyISAM | org.hibernate.dialect.MySQLMyISAMDialect |
Oracle (any version) | org.hibernate.dialect.OracleDialect |
Oracle 9i | org.hibernate.dialect.Oracle9Dialect |
Oracle 11g | org.hibernate.dialect.Oracle10Dialect |
Sybase | org.hibernate.dialect.SybaseDialect |
Sybase Anywhere | org.hibernate.dialect.SybaseAnywhereDialect |
Microsoft SQL Server | org.hibernate.dialect.SQLServerDialect |
SAP DB | org.hibernate.dialect.SAPDBDialect |
Informix | org.hibernate.dialect.InformixDialect |
HypersonicSQL | org.hibernate.dialect.HSQLDialect |
Ingres | org.hibernate.dialect.IngresDialect |
Progress | org.hibernate.dialect.ProgressDialect |
Mckoi SQL | org.hibernate.dialect.MckoiDialect |
Interbase | org.hibernate.dialect.InterbaseDialect |
Pointbase | org.hibernate.dialect.PointbaseDialect |
FrontBase | org.hibernate.dialect.FrontbaseDialect |
Firebird | org.hibernate.dialect.FirebirdDialect |
Hibernate validáció
Hiberate érték ellenőrző beállítása JSF komponenseken (WebContent/WEB_INF/faces-config.xml):
<application> <message-bundle>JsfMessageResources</message-bundle> </application>
JsfMessageResources_hu.properties az src könyvtárban:
# # Overrides default pattern in JSF for Bean Validation messages from "{0}" to "{1} {0}" where # the {0} is the Bean Validation constraint message (e.g. "may not be empty") and {1} is the # field name or the field label if defined (e.g. "First name"). # javax.faces.validator.BeanValidator.MESSAGE={1} {0}
ValidationMessages_hu_HU.properties az src könyvtárban:
org.hibernate.validator.constraints.Email.message=Hibásan formázott e-mail cím org.hibernate.validator.constraints.NotEmpty.message=Nem lehet üres érték org.hibernate.validator.constraints.NotNull.message=Nem lehet null érték
Adatbázisból Hibernate domain objektumok gyártása
Ez a funkció nagyon hasznos, ha Quartz táblákból szeretnénk osztályokat gyártani a Hibernate számára.
Eclipse-ben szükségünk lesz a JBoss Tools kiegészítőre, amit a help/Eclipse Marketplace-en keresztül telepíthetünk.
Készítsünk egy Java Projektet, majd ebbe egy Hibernate konfigurációt (file/new/Other.. /Hibernate/Hibernate Configuration file (cfg.xml), egy Hibernate konzol konfigurációt (file/new/Other.. /Hibernate/Hibernate Console Configuration) és egy Hibernate visszafejtő konfigurációt (file/new/Other.. /Hibernate/Hibernate Reverse Engeneering file (reveng.xml)
Váltsunk át Hibernate perspektívára, majd a Run hibernate.reveng.xml gombot legördítve Hibernate Code Generation Configurations... menüponban konfiguráljuk a visszafejtés futtatását. Itt a generálást is elindíthatjuk.
Hasznos hivatkozások:
- A hozzászóláshoz be kell jelentkezni