|
Hibernate example source code file (best_practices.pot)
This example Hibernate source code file (best_practices.pot) is included in the DevDaily.com
"Java Source Code
Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.
The Hibernate best_practices.pot source code
#
# AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: 0\n"
"POT-Creation-Date: 2010-02-11T05:38:15\n"
"PO-Revision-Date: 2010-02-11T05:38:15\n"
"Last-Translator: Automatically generated\n"
"Language-Team: None\n"
"MIME-Version: 1.0\n"
"Content-Type: application/x-publican; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. Tag: title
#, no-c-format
msgid "Best Practices"
msgstr ""
#. Tag: term
#, no-c-format
msgid "Write fine-grained classes and map them using <literal><component>:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "Use an <literal>Address class to encapsulate street, suburb, state, postcode. This encourages code reuse and simplifies refactoring."
msgstr ""
#. Tag: term
#, no-c-format
msgid "Declare identifier properties on persistent classes:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "Hibernate makes identifier properties optional. There are a range of reasons why you should use them. We recommend that identifiers be 'synthetic', that is, generated with no business meaning."
msgstr ""
#. Tag: term
#, no-c-format
msgid "Identify natural keys:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "Identify natural keys for all entities, and map them using <literal><natural-id>. Implement equals() and hashCode() to compare the properties that make up the natural key."
msgstr ""
#. Tag: term
#, no-c-format
msgid "Place each class mapping in its own file:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "Do not use a single monolithic mapping document. Map <literal>com.eg.Foo in the file com/eg/Foo.hbm.xml. This makes sense, particularly in a team environment."
msgstr ""
#. Tag: term
#, no-c-format
msgid "Load mappings as resources:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "Deploy the mappings along with the classes they map."
msgstr ""
#. Tag: term
#, no-c-format
msgid "Consider externalizing query strings:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "This is recommended if your queries call non-ANSI-standard SQL functions. Externalizing the query strings to mapping files will make the application more portable."
msgstr ""
#. Tag: term
#, no-c-format
msgid "Use bind variables."
msgstr ""
#. Tag: para
#, no-c-format
msgid "As in JDBC, always replace non-constant values by \"?\". Do not use string manipulation to bind a non-constant value in a query. You should also consider using named parameters in queries."
msgstr ""
#. Tag: term
#, no-c-format
msgid "Do not manage your own JDBC connections:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "Hibernate allows the application to manage JDBC connections, but his approach should be considered a last-resort. If you cannot use the built-in connection providers, consider providing your own implementation of <literal>org.hibernate.connection.ConnectionProvider."
msgstr ""
#. Tag: term
#, no-c-format
msgid "Consider using a custom type:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "Suppose you have a Java type from a library that needs to be persisted but does not provide the accessors needed to map it as a component. You should consider implementing <literal>org.hibernate.UserType. This approach frees the application code from implementing transformations to/from a Hibernate type."
msgstr ""
#. Tag: term
#, no-c-format
msgid "Use hand-coded JDBC in bottlenecks:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "In performance-critical areas of the system, some kinds of operations might benefit from direct JDBC. Do not assume, however, that JDBC is necessarily faster. Please wait until you <emphasis>know something is a bottleneck. If you need to use direct JDBC, you can open a Hibernate Session, wrap your JDBC operation as a org.hibernate.jdbc.Work object and using that JDBC connection. This way you can still use the same transaction strategy and underlying connection provider."
msgstr ""
#. Tag: term
#, no-c-format
msgid "Understand <literal>Session flushing:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "Sometimes the Session synchronizes its persistent state with the database. Performance will be affected if this process occurs too often. You can sometimes minimize unnecessary flushing by disabling automatic flushing, or even by changing the order of queries and other operations within a particular transaction."
msgstr ""
#. Tag: term
#, no-c-format
msgid "In a three tiered architecture, consider using detached objects:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "When using a servlet/session bean architecture, you can pass persistent objects loaded in the session bean to and from the servlet/JSP layer. Use a new session to service each request. Use <literal>Session.merge() or Session.saveOrUpdate() to synchronize objects with the database."
msgstr ""
#. Tag: term
#, no-c-format
msgid "In a two tiered architecture, consider using long persistence contexts:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "Database Transactions have to be as short as possible for best scalability. However, it is often necessary to implement long running <emphasis>application transactions, a single unit-of-work from the point of view of a user. An application transaction might span several client request/response cycles. It is common to use detached objects to implement application transactions. An appropriate alternative in a two tiered architecture, is to maintain a single open persistence contact session for the whole life cycle of the application transaction. Then simply disconnect from the JDBC connection at the end of each request and reconnect at the beginning of the subsequent request. Never share a single session across more than one application transaction or you will be working with stale data."
msgstr ""
#. Tag: term
#, no-c-format
msgid "Do not treat exceptions as recoverable:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "This is more of a necessary practice than a \"best\" practice. When an exception occurs, roll back the <literal>Transaction and close the Session. If you do not do this, Hibernate cannot guarantee that in-memory state accurately represents the persistent state. For example, do not use Session.load() to determine if an instance with the given identifier exists on the database; use Session.get() or a query instead."
msgstr ""
#. Tag: term
#, no-c-format
msgid "Prefer lazy fetching for associations:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "Use eager fetching sparingly. Use proxies and lazy collections for most associations to classes that are not likely to be completely held in the second-level cache. For associations to cached classes, where there is an a extremely high probability of a cache hit, explicitly disable eager fetching using <literal>lazy=\"false\". When join fetching is appropriate to a particular use case, use a query with a left join fetch."
msgstr ""
#. Tag: term
#, no-c-format
msgid "Use the <emphasis>open session in view pattern, or a disciplined assembly phase to avoid problems with unfetched data:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "Hibernate frees the developer from writing tedious <emphasis>Data Transfer Objects (DTO). In a traditional EJB architecture, DTOs serve dual purposes: first, they work around the problem that entity beans are not serializable; second, they implicitly define an assembly phase where all data to be used by the view is fetched and marshalled into the DTOs before returning control to the presentation tier. Hibernate eliminates the first purpose. Unless you are prepared to hold the persistence context (the session) open across the view rendering process, you will still need an assembly phase. Think of your business methods as having a strict contract with the presentation tier about what data is available in the detached objects. This is not a limitation of Hibernate. It is a fundamental requirement of safe transactional data access."
msgstr ""
#. Tag: term
#, no-c-format
msgid "Consider abstracting your business logic from Hibernate:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "Hide Hibernate data-access code behind an interface. Combine the <emphasis>DAO and Thread Local Session patterns. You can even have some classes persisted by handcoded JDBC associated to Hibernate via a UserType. This advice is, however, intended for \"sufficiently large\" applications. It is not appropriate for an application with five tables."
msgstr ""
#. Tag: term
#, no-c-format
msgid "Do not use exotic association mappings:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "Practical test cases for real many-to-many associations are rare. Most of the time you need additional information stored in the \"link table\". In this case, it is much better to use two one-to-many associations to an intermediate link class. In fact, most associations are one-to-many and many-to-one. For this reason, you should proceed cautiously when using any other association style."
msgstr ""
#. Tag: term
#, no-c-format
msgid "Prefer bidirectional associations:"
msgstr ""
#. Tag: para
#, no-c-format
msgid "Unidirectional associations are more difficult to query. In a large application, almost all associations must be navigable in both directions in queries."
msgstr ""
Other Hibernate examples (source code examples)
Here is a short list of links related to this Hibernate best_practices.pot source code file:
|