KEMBAR78
02 Hibernate Introduction | PPT
Hibernate Introduction Hello World and the Hibernate APIs
Hello World I The Hello World program prints messages To demonstrate Hibernate, let’s define a  persistent  message we use a  Message  persistent class, POJO style package hello; public class Message { private Long id; private String text; public String getText()  { return text; } public void setText(String text)  { this.text = text; } … }
Hello World II Messages don't have to be persistent! we can use our persistent classes “outside” of Hibernate Hibernate is able to “manage” persistent instances but POJO persistent classes don't depend on Hibernate Message message = new Message("Hello World"); System.out.println( message.getText() );
Hello World VI XML mapping metadata: <?xml version=&quot;1.0&quot;?> <! DOCTYPE hibernate-mapping PUBLIC &quot;-//Hibernate/Hibernate Mapping DTD//EN&quot; &quot;http://hibernate.sf.net/hibernate-mapping-2.0.dtd&quot;> <hibernate-mapping> <class name=&quot;hello.Message&quot; table=&quot; MESSAGES &quot;> <id>...</id> <property name=&quot;text&quot; column=&quot; MESSAGE_TEXT &quot;/> </class> </hibernate-mapping>
Hello World III Let's persist a message with Session and Transaction: Hibernate executes this SQL: Session  session  = getSessionFactory().openSession(); Transaction  tx  = session.beginTransaction(); Message message = new Message(&quot;Hello World&quot;); session .save(message); tx .commit(); session .close(); insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT) values (1, 'Hello World')
Hello World IV Let's show all persistent messages: Session  newSession  = getSessionFactory().openSession(); Transaction  newTransaction  = newSession.beginTransaction(); List messages =  newSession .find(&quot;from Message&quot;); System.out.println( messages.size() + &quot; message(s) found:&quot; ); for ( Iterator iter = messages.iterator(); iter.hasNext(); ) { Message message = (Message) iter.next(); System.out.println( message.getText() ); } newTransaction .commit(); newSession .close(); select m.MESSAGE_ID, m.MESSAGE_TEXT from MESSAGES m
Hello World V Let's update a message: Notice that we did not explicitly call any update() method - automatic dirty checking gives us more flexibility when organizing data access code! Session  session  = getSessionFactory().openSession(); Transaction  tx  = session.beginTransaction(); // 1 is the generated id of the first message Message message =  session .load( Message.class, new Long(1) ); message.setText(&quot;Greetings Earthling&quot;); tx .commit(); session .close(); select m.MESSAGE_TEXT from MESSAGES m where m.MESSAGE_ID = 1 update MESSAGES set MESSAGE_TEXT = ‘Greetings Earthling'
Using C3P0 with hibernate.properties Let's configure Hibernate to use C3P0 connection pooling Hibernate automatically loads  hibernate.properties  from a root directory of the classpath Don't forget to set the SQL dialect! hibernate.connection.driver_class = org.postgresql.Driver hibernate.connection.url = jdbc:postgresql://localhost/auctiondb hibernate.connection.username = auctionuser hibernate.connection.password = secret hibernate.dialect = net.sf.hibernate.dialect.PostgreSQLDialect hibernate.c3p0.min_size = 5 hibernate.c3p0.max_size = 20 hibernate.c3p0.timeout = 1800 hibernate.c3p0.max_statements = 50 Hibernate.c3p0.validate = true
Starting Hibernate We create a  SessionFactory  using a  Configuration download and install JDBC driver in classpath copy Hibernate and the required 3rd party libraries chose a JDBC connection pool, customize properties add mapping files to the  Configuration build the  SessionFactory  (immutable!)  SessionFactory sessionFactory = new Configuration() .addResource(&quot;hello/Message.hbm.xml&quot;) .buildSessionFactory();
Other configuration options Instead of using a  hibernate.properties  file, we may also pass an instance of  Properties  to  Configuration  programmatically set  System  properties using  java -Dproperty= value use a  hibernate.cfg.xml  file in the classpath The XML-based configuration is almost equivalent to the properties, it has some more features (cache tuning). The XML file overrides the  hibernate.properties  options. We usually prefer the XML configuration file, especially in managed environments.
Hibernate Architecture Hibernate Architecture Transaction Query Application Session Session   Factory Configuration Hibernate.cfg.xml Hibernate.properties Mapping   files
Hibernate Architecture Hibernate Architecture
Hibernate Architecture
Hibernate Architecture
Understanding the interfaces Hibernate dependencies in a layered application architecture: Business Layer Persistence Layer Lifecycle Validatable UserType Persistent Classes Persistent Classes SessionFactory Configuration Session Transaction Query JNDI JDBC JTA Interceptor
SessionFactory SessionFactory (org.hibernate.SessionFactory) A thread safe (immutable) cache of compiled mappings for a single database. A factory for Session and a client of Connection Provider. Might hold an optional (second-level) cache of data that is reusable between transactions, at a process- or cluster-level.
Session Session (org.hibernate.Session) A single-threaded, short-lived object representing a conversation between the application and the persistent store. Wraps a JDBC connection. Factory for Transaction. Holds a mandatory (first-level) cache of persistent objects, used when navigating the object graph or looking up objects by identifier.
Persistent Objects and Collections Persistent objects and collections Short-lived, single threaded objects containing persistent state and business function. These might be ordinary JavaBeans/POJOs, the only special thing about them is that they are currently associated with (exactly one) Session. As soon as the Session is closed, they will be detached and free to use in any application layer (e.g. directly as data transfer objects to and from presentation).
Transient and detached objects and collections Transient and detached objects and collections Instances of persistent classes that are not currently associated with a Session. They may have been instantiated by the application and not (yet) persisted or they may have been instantiated by a closed Session. .
Transaction Transaction (org.hibernate.Transaction) (Optional) A single-threaded, short-lived object used by the application to specify atomic units of work. Abstracts application from underlying JDBC, JTA or CORBA transaction. A Session might span several Transactions in some cases. However, transaction demarcation, either using the underlying API or Transaction, is never optional! .
ConnectionProvider ConnectionProvider  (org.hibernate.connection.ConnectionProvider) (Optional) A factory for (and pool of) JDBC connections. Abstracts application from underlying Datasource or DriverManager. Not exposed to application, but can be extended/implemented by the developer.
TransactionFactory TransactionFactory  (org.hibernate.TransactionFactory) (Optional) A factory for Transaction instances. Not exposed to the application, but can be extended/implemented by the developer.
Extension Interfaces Extension Interfaces Hibernate offers many optional extension interfaces you can implement to customize the behavior of your persistence layer.(Ex. Primary key generation,SQL Dialet , Caching,JDBC connection, Proxy creationetc., Given a &quot;lite&quot; architecture, the application bypasses the  Transaction/TransactionFactory and/or ConnectionProvider APIs to talk to JTA or JDBC directly.
Instance States Instance states An instance of a persistent classes may be in one of three different states, which are defined with respect to a  persistence context .
Instance States Instance states An instance of a persistent classes may be in one of three different states, which are defined with respect to a  persistence context .
Instance States Transient The instance is not, and has never been associated with any persistence context. It has no persistent identity (primary key value).
Instance States Persistent The instance is currently associated with a persistence context. It has a persistent identity (primary key value) and, perhaps, a corresponding row in the database. For a particular persistence context, Hibernate  guarantees  that persistent identity is equivalent to Java identity (in-memory location of the object).
Instance States Detached The instance was once associated with a persistence context, but that context was closed, or the instance was serialized to another process. It has a persistent identity and, perhaps, a corresponding row in the database. For detached instances, Hibernate makes no guarantees about the relationship between persistent identity and Java identity.
Managed environments Hibernate can be used in an application server: Hibernate Managed environment Resource Manager Application EJB EJB EJB Session Transaction Query Transaction Manager Each database has it's own  SessionFactory !
Configuration: “non-managed” environments In a “non-managed” environment (eg. Tomcat), we need a JDBC connection pool: C3P0, Proxool, custom  ConnectionProvider Hibernate Non-managed environment Connection Pool Application JSP Servlet main() Session Transaction Query
Managed environment with XML configuration file <hibernate-configuration> <session-factory name=&quot; java:hibernate/SessionFactory &quot;> <property name=&quot;show_sql&quot;>true</property> <property name=&quot;connection.datasource&quot;> java:/comp/env/jdbc/HelloDB </property> <property name=&quot;transaction.factory_class&quot;> net.sf.hibernate.transaction.JTATransactionFactory </property> <property name=&quot; transaction.manager_lookup_class &quot;> net.sf.hibernate.transaction.JBossTransactionManagerLookup </property>   <property name=&quot;dialect&quot;> net.sf.hibernate.dialect.PostgreSQLDialect </property> <mapping resource=&quot;hello/Message.hbm.xml&quot;/> </session-factory> </hibernate-configuration>
Session Cache To improve the performance within the Hibernate service, as well as your application, is to cache objects. By caching objects in memory, Hibernate avoids the overhead of retrieving them from the database each time. Other than saving overhead when retrieving objects, the Session cache  also impacts saving and updating objects. The session interface supports a simple instance cache for each object that is loaded or saved during the lifetime of a given Session.
Session Cache Code watch : Session session = factory.openSession(); Event e = (Event) session.load(Event.class, myEventId); e.setName(“Hibernate training”); session.saveOrUpdate(e); // later, with the same Session instance Event e = (Event) session.load(Event.class, myEventId); e.setDuration(180); session.saveOrUpdate(e); session.flush();
The Session Cache – Common problem Don’t associate two instances of the same object with the same Session instance, resulting in a NonUniqueObjectException. Session session = factory.openSession(); Event firstEvent = (Event) session.load(Event.class, myEventId); //peform some operation on firstEvent Event secondEvent = new Event(); secondEvent.setId(myEventId); Session.save(secondEvent); This code opens the Session instance, loads an Event instance with a given ID, creates a second Event instance with the same Id, and then attempts to save the second Event instance, resulting in the  NonUniqueObjectException.
The Session Cache – Object Information To see whether an object is contained in the cache Session.contains() Objects can be evicted from the cache by calling  Session.evict() To clear all the objects from Session cache Session.clear()
XDoclet XDoclet is an open source project with an Apache-style license, Hosted at sourceforge.net. We can avoid manually writing mapping files. Add some comments on the .java file and XDoclet will automatically Generates corresponding .hbm file XDoclet 1.2.3 support Hibernate 3.x XDoclet  needs to come with new versions whenever Hibernate Version are changed with new features.
XDoclet @hibernate.class tag A common @hibernate.class attribute Attribute :  table Description :  contains the name of the table where instances of this class will be persisted to. Default : class name
XDoclet - @hibernate.id tag The default size for the field type. Specified the size of the database column length Null. If we use a String or Long as the primary key, you don’t need to specify this.Specify the unsaved-value=0 for primitive types. Contains a value that will distinguish transient instances from persistent ones unsaved-value The property name Contains the name of the column column The return type of the field. Specifies the Hibernate type for this field type None. native will work for most databases Contains the key generation that Hibernate will use to insert new instances generator-class Default Description Attribute
The @hibernate.property tag Return type of the field Specifies the hibernate type type false Specifies that a unique constraint should be enforced unique false Specifies that a not-null constraint should be enforced not-null The default length for a field. Specifies the column size length The name of the field Contains the name of the column column Default Description Attribute
The @hibernate.column tag The type implied by the length Specifies database-specific column type, like TEXT or LONGBLOG sql-type No constraint created Creates a uniquely named constraint with this name unique-key No named index created Contains the name of a table index for this column index false Specifies that a unique constraint should be enforced unique False Specifies that a not-null constraint should be enforced not-null The default length for a field. Specifies the column size length It’s mandatory, so no default Contains the name of the column this property maps to name Default Description Attribute
The @hibernate.many-to-one attributes None. Acceptable values include all, none,save-update or delete Specifies how cascading operations should be handled from parent to child Cascade false Specifies that a unique constraint should be enforced Unique False Specifies that a not-null constraint should be enforced not-null The class of the field Contains the associated persistent class Class The name of the field Contains the name of the column in the database column Default Description Attribute
Hibernate mapping elements to XDoclet tags  @hibernate.collection-one-to-many A nested <one-to-many> @hibernate.collection-key A nested <key /> @hibernate.set <set / > XDoclet tag Mapping element
The @hibernate.set tag false Specifies whether the collection is inverse(determines which end of the collection is the parent) Inverse No ORDERBY  added Specifies whether the query to fetch the collection should ad a SQL ORDER BY(asc/desc)  Order-by None. Acceptable values include all, none,save-update or delete Specifies how cascading operations should be handled from parent to child Cascade Not sorted by default Specifies whether the collection should be sorted in memory.  Sort False Specifies whether the collection should be lazily initialized Lazy For a many-to-many, it uses the name of the field For the man-to-many association only,contains the association table name for joins Table None. Acceptable values include all,none,save-update, all-delete-orphan and delete Specifies how cascading operations should be handled from parent to child Cascade Default Description Attribute

02 Hibernate Introduction

  • 1.
    Hibernate Introduction HelloWorld and the Hibernate APIs
  • 2.
    Hello World IThe Hello World program prints messages To demonstrate Hibernate, let’s define a persistent message we use a Message persistent class, POJO style package hello; public class Message { private Long id; private String text; public String getText() { return text; } public void setText(String text) { this.text = text; } … }
  • 3.
    Hello World IIMessages don't have to be persistent! we can use our persistent classes “outside” of Hibernate Hibernate is able to “manage” persistent instances but POJO persistent classes don't depend on Hibernate Message message = new Message(&quot;Hello World&quot;); System.out.println( message.getText() );
  • 4.
    Hello World VIXML mapping metadata: <?xml version=&quot;1.0&quot;?> <! DOCTYPE hibernate-mapping PUBLIC &quot;-//Hibernate/Hibernate Mapping DTD//EN&quot; &quot;http://hibernate.sf.net/hibernate-mapping-2.0.dtd&quot;> <hibernate-mapping> <class name=&quot;hello.Message&quot; table=&quot; MESSAGES &quot;> <id>...</id> <property name=&quot;text&quot; column=&quot; MESSAGE_TEXT &quot;/> </class> </hibernate-mapping>
  • 5.
    Hello World IIILet's persist a message with Session and Transaction: Hibernate executes this SQL: Session session = getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); Message message = new Message(&quot;Hello World&quot;); session .save(message); tx .commit(); session .close(); insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT) values (1, 'Hello World')
  • 6.
    Hello World IVLet's show all persistent messages: Session newSession = getSessionFactory().openSession(); Transaction newTransaction = newSession.beginTransaction(); List messages = newSession .find(&quot;from Message&quot;); System.out.println( messages.size() + &quot; message(s) found:&quot; ); for ( Iterator iter = messages.iterator(); iter.hasNext(); ) { Message message = (Message) iter.next(); System.out.println( message.getText() ); } newTransaction .commit(); newSession .close(); select m.MESSAGE_ID, m.MESSAGE_TEXT from MESSAGES m
  • 7.
    Hello World VLet's update a message: Notice that we did not explicitly call any update() method - automatic dirty checking gives us more flexibility when organizing data access code! Session session = getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); // 1 is the generated id of the first message Message message = session .load( Message.class, new Long(1) ); message.setText(&quot;Greetings Earthling&quot;); tx .commit(); session .close(); select m.MESSAGE_TEXT from MESSAGES m where m.MESSAGE_ID = 1 update MESSAGES set MESSAGE_TEXT = ‘Greetings Earthling'
  • 8.
    Using C3P0 withhibernate.properties Let's configure Hibernate to use C3P0 connection pooling Hibernate automatically loads hibernate.properties from a root directory of the classpath Don't forget to set the SQL dialect! hibernate.connection.driver_class = org.postgresql.Driver hibernate.connection.url = jdbc:postgresql://localhost/auctiondb hibernate.connection.username = auctionuser hibernate.connection.password = secret hibernate.dialect = net.sf.hibernate.dialect.PostgreSQLDialect hibernate.c3p0.min_size = 5 hibernate.c3p0.max_size = 20 hibernate.c3p0.timeout = 1800 hibernate.c3p0.max_statements = 50 Hibernate.c3p0.validate = true
  • 9.
    Starting Hibernate Wecreate a SessionFactory using a Configuration download and install JDBC driver in classpath copy Hibernate and the required 3rd party libraries chose a JDBC connection pool, customize properties add mapping files to the Configuration build the SessionFactory (immutable!) SessionFactory sessionFactory = new Configuration() .addResource(&quot;hello/Message.hbm.xml&quot;) .buildSessionFactory();
  • 10.
    Other configuration optionsInstead of using a hibernate.properties file, we may also pass an instance of Properties to Configuration programmatically set System properties using java -Dproperty= value use a hibernate.cfg.xml file in the classpath The XML-based configuration is almost equivalent to the properties, it has some more features (cache tuning). The XML file overrides the hibernate.properties options. We usually prefer the XML configuration file, especially in managed environments.
  • 11.
    Hibernate Architecture HibernateArchitecture Transaction Query Application Session Session Factory Configuration Hibernate.cfg.xml Hibernate.properties Mapping files
  • 12.
  • 13.
  • 14.
  • 15.
    Understanding the interfacesHibernate dependencies in a layered application architecture: Business Layer Persistence Layer Lifecycle Validatable UserType Persistent Classes Persistent Classes SessionFactory Configuration Session Transaction Query JNDI JDBC JTA Interceptor
  • 16.
    SessionFactory SessionFactory (org.hibernate.SessionFactory)A thread safe (immutable) cache of compiled mappings for a single database. A factory for Session and a client of Connection Provider. Might hold an optional (second-level) cache of data that is reusable between transactions, at a process- or cluster-level.
  • 17.
    Session Session (org.hibernate.Session)A single-threaded, short-lived object representing a conversation between the application and the persistent store. Wraps a JDBC connection. Factory for Transaction. Holds a mandatory (first-level) cache of persistent objects, used when navigating the object graph or looking up objects by identifier.
  • 18.
    Persistent Objects andCollections Persistent objects and collections Short-lived, single threaded objects containing persistent state and business function. These might be ordinary JavaBeans/POJOs, the only special thing about them is that they are currently associated with (exactly one) Session. As soon as the Session is closed, they will be detached and free to use in any application layer (e.g. directly as data transfer objects to and from presentation).
  • 19.
    Transient and detachedobjects and collections Transient and detached objects and collections Instances of persistent classes that are not currently associated with a Session. They may have been instantiated by the application and not (yet) persisted or they may have been instantiated by a closed Session. .
  • 20.
    Transaction Transaction (org.hibernate.Transaction)(Optional) A single-threaded, short-lived object used by the application to specify atomic units of work. Abstracts application from underlying JDBC, JTA or CORBA transaction. A Session might span several Transactions in some cases. However, transaction demarcation, either using the underlying API or Transaction, is never optional! .
  • 21.
    ConnectionProvider ConnectionProvider (org.hibernate.connection.ConnectionProvider) (Optional) A factory for (and pool of) JDBC connections. Abstracts application from underlying Datasource or DriverManager. Not exposed to application, but can be extended/implemented by the developer.
  • 22.
    TransactionFactory TransactionFactory (org.hibernate.TransactionFactory) (Optional) A factory for Transaction instances. Not exposed to the application, but can be extended/implemented by the developer.
  • 23.
    Extension Interfaces ExtensionInterfaces Hibernate offers many optional extension interfaces you can implement to customize the behavior of your persistence layer.(Ex. Primary key generation,SQL Dialet , Caching,JDBC connection, Proxy creationetc., Given a &quot;lite&quot; architecture, the application bypasses the Transaction/TransactionFactory and/or ConnectionProvider APIs to talk to JTA or JDBC directly.
  • 24.
    Instance States Instancestates An instance of a persistent classes may be in one of three different states, which are defined with respect to a persistence context .
  • 25.
    Instance States Instancestates An instance of a persistent classes may be in one of three different states, which are defined with respect to a persistence context .
  • 26.
    Instance States TransientThe instance is not, and has never been associated with any persistence context. It has no persistent identity (primary key value).
  • 27.
    Instance States PersistentThe instance is currently associated with a persistence context. It has a persistent identity (primary key value) and, perhaps, a corresponding row in the database. For a particular persistence context, Hibernate guarantees that persistent identity is equivalent to Java identity (in-memory location of the object).
  • 28.
    Instance States DetachedThe instance was once associated with a persistence context, but that context was closed, or the instance was serialized to another process. It has a persistent identity and, perhaps, a corresponding row in the database. For detached instances, Hibernate makes no guarantees about the relationship between persistent identity and Java identity.
  • 29.
    Managed environments Hibernatecan be used in an application server: Hibernate Managed environment Resource Manager Application EJB EJB EJB Session Transaction Query Transaction Manager Each database has it's own SessionFactory !
  • 30.
    Configuration: “non-managed” environmentsIn a “non-managed” environment (eg. Tomcat), we need a JDBC connection pool: C3P0, Proxool, custom ConnectionProvider Hibernate Non-managed environment Connection Pool Application JSP Servlet main() Session Transaction Query
  • 31.
    Managed environment withXML configuration file <hibernate-configuration> <session-factory name=&quot; java:hibernate/SessionFactory &quot;> <property name=&quot;show_sql&quot;>true</property> <property name=&quot;connection.datasource&quot;> java:/comp/env/jdbc/HelloDB </property> <property name=&quot;transaction.factory_class&quot;> net.sf.hibernate.transaction.JTATransactionFactory </property> <property name=&quot; transaction.manager_lookup_class &quot;> net.sf.hibernate.transaction.JBossTransactionManagerLookup </property> <property name=&quot;dialect&quot;> net.sf.hibernate.dialect.PostgreSQLDialect </property> <mapping resource=&quot;hello/Message.hbm.xml&quot;/> </session-factory> </hibernate-configuration>
  • 32.
    Session Cache Toimprove the performance within the Hibernate service, as well as your application, is to cache objects. By caching objects in memory, Hibernate avoids the overhead of retrieving them from the database each time. Other than saving overhead when retrieving objects, the Session cache also impacts saving and updating objects. The session interface supports a simple instance cache for each object that is loaded or saved during the lifetime of a given Session.
  • 33.
    Session Cache Codewatch : Session session = factory.openSession(); Event e = (Event) session.load(Event.class, myEventId); e.setName(“Hibernate training”); session.saveOrUpdate(e); // later, with the same Session instance Event e = (Event) session.load(Event.class, myEventId); e.setDuration(180); session.saveOrUpdate(e); session.flush();
  • 34.
    The Session Cache– Common problem Don’t associate two instances of the same object with the same Session instance, resulting in a NonUniqueObjectException. Session session = factory.openSession(); Event firstEvent = (Event) session.load(Event.class, myEventId); //peform some operation on firstEvent Event secondEvent = new Event(); secondEvent.setId(myEventId); Session.save(secondEvent); This code opens the Session instance, loads an Event instance with a given ID, creates a second Event instance with the same Id, and then attempts to save the second Event instance, resulting in the NonUniqueObjectException.
  • 35.
    The Session Cache– Object Information To see whether an object is contained in the cache Session.contains() Objects can be evicted from the cache by calling Session.evict() To clear all the objects from Session cache Session.clear()
  • 36.
    XDoclet XDoclet isan open source project with an Apache-style license, Hosted at sourceforge.net. We can avoid manually writing mapping files. Add some comments on the .java file and XDoclet will automatically Generates corresponding .hbm file XDoclet 1.2.3 support Hibernate 3.x XDoclet needs to come with new versions whenever Hibernate Version are changed with new features.
  • 37.
    XDoclet @hibernate.class tagA common @hibernate.class attribute Attribute : table Description : contains the name of the table where instances of this class will be persisted to. Default : class name
  • 38.
    XDoclet - @hibernate.idtag The default size for the field type. Specified the size of the database column length Null. If we use a String or Long as the primary key, you don’t need to specify this.Specify the unsaved-value=0 for primitive types. Contains a value that will distinguish transient instances from persistent ones unsaved-value The property name Contains the name of the column column The return type of the field. Specifies the Hibernate type for this field type None. native will work for most databases Contains the key generation that Hibernate will use to insert new instances generator-class Default Description Attribute
  • 39.
    The @hibernate.property tagReturn type of the field Specifies the hibernate type type false Specifies that a unique constraint should be enforced unique false Specifies that a not-null constraint should be enforced not-null The default length for a field. Specifies the column size length The name of the field Contains the name of the column column Default Description Attribute
  • 40.
    The @hibernate.column tagThe type implied by the length Specifies database-specific column type, like TEXT or LONGBLOG sql-type No constraint created Creates a uniquely named constraint with this name unique-key No named index created Contains the name of a table index for this column index false Specifies that a unique constraint should be enforced unique False Specifies that a not-null constraint should be enforced not-null The default length for a field. Specifies the column size length It’s mandatory, so no default Contains the name of the column this property maps to name Default Description Attribute
  • 41.
    The @hibernate.many-to-one attributesNone. Acceptable values include all, none,save-update or delete Specifies how cascading operations should be handled from parent to child Cascade false Specifies that a unique constraint should be enforced Unique False Specifies that a not-null constraint should be enforced not-null The class of the field Contains the associated persistent class Class The name of the field Contains the name of the column in the database column Default Description Attribute
  • 42.
    Hibernate mapping elementsto XDoclet tags @hibernate.collection-one-to-many A nested <one-to-many> @hibernate.collection-key A nested <key /> @hibernate.set <set / > XDoclet tag Mapping element
  • 43.
    The @hibernate.set tagfalse Specifies whether the collection is inverse(determines which end of the collection is the parent) Inverse No ORDERBY added Specifies whether the query to fetch the collection should ad a SQL ORDER BY(asc/desc) Order-by None. Acceptable values include all, none,save-update or delete Specifies how cascading operations should be handled from parent to child Cascade Not sorted by default Specifies whether the collection should be sorted in memory. Sort False Specifies whether the collection should be lazily initialized Lazy For a many-to-many, it uses the name of the field For the man-to-many association only,contains the association table name for joins Table None. Acceptable values include all,none,save-update, all-delete-orphan and delete Specifies how cascading operations should be handled from parent to child Cascade Default Description Attribute