⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transactions.po

📁 hibernate 开源框架的代码 jar包希望大家能喜欢
💻 PO
📖 第 1 页 / 共 5 页
字号:
"literal> methods in persistent classes and implement his own notion of ""object equality. There is one caveat: Never use the database identifier to ""implement equality, use a business key, a combination of unique, usually ""immutable, attributes. The database identifier will change if a transient ""object is made persistent. If the transient instance (usually together with ""detached instances) is held in a <literal>Set</literal>, changing the ""hashcode breaks the contract of the <literal>Set</literal>. Attributes for ""business keys don't have to be as stable as database primary keys, you only ""have to guarantee stability as long as the objects are in the same ""<literal>Set</literal>. See the Hibernate website for a more thorough ""discussion of this issue. Also note that this is not a Hibernate issue, but ""simply how Java object identity and equality has to be implemented."msgstr """Sin embargo, una aplicación que usa <literal>==</literal> fuera de una ""<literal>Session</literal>, podría ver resultados inesperados. Esto podría ""ocurrir incluso en sitios algo inesperados, por ejemplo, si pones dos ""instancias separadas dentro del mismo <literal>Set</literal>. Ambas podrían ""tener la misma identidad de base de datos (es decir, representar la misma ""fila), pero la identidad JVM, por definición, no está garantizada para las ""instancias en estado separado. El desarrollador tiene que sobrescribir los ""métodos <literal>equals()</literal> y <literal>hashCode()</literal> en las ""clases persistentes e implementar su propia noción de igualdad de objetos. ""Hay una advertencia: Nunca uses el identificador de base de datos para ""implementar la igualdad, usa una clave de negocio, una combinación de ""atributos únicos, usualmente inmutables. El identificador de base de datos ""cambiará si un objeto transitorio es hecho persistente. Si la instancia ""transitoria (usualmente junta a instancias separadas) es mantenida en un ""<literal>Set</literal>, cambiar el código hash rompe el contrato del ""<literal>Set</literal>. Los atributos para las claves de negocio no tienen ""que ser tan estables como las claves primarias de base de datos, sólo tienes ""que garantizar estabilidad en tanto los objetos estén en el mismo ""<literal>Set</literal>. Mira el sitio web de Hibernate para una discusión ""más cuidadosa de este tema. Nota también que éste no es un tema de ""Hibernate, sino simplemente cómo la identidad y la igualdad de los objetos ""Java tiene que ser implementada."#. Tag: title#: transactions.xml:296#, no-c-formatmsgid "Common issues"msgstr "Temas comunes"#. Tag: para#: transactions.xml:298#, no-c-formatmsgid """Never use the anti-patterns <emphasis>session-per-user-session</emphasis> or ""<emphasis>session-per-application</emphasis> (of course, there are rare ""exceptions to this rule). Note that some of the following issues might also ""appear with the recommended patterns, make sure you understand the ""implications before making a design decision:"msgstr """Nunca uses los antipatrones <emphasis>sesión-por-sesión-de-usuario</""emphasis> o <emphasis>sesión-por-aplicación</emphasis> (por supuesto, hay ""raras excepciones a esta regla). Nota que algunis de los siguientes temas ""podrían también aparecer con los patrones recomendados. Asegúrate que ""entiendes las implicaciones antes de tomar una decisión de diseño:"#. Tag: para#: transactions.xml:307#, no-c-formatmsgid """A <literal>Session</literal> is not thread-safe. Things which are supposed ""to work concurrently, like HTTP requests, session beans, or Swing workers, ""will cause race conditions if a <literal>Session</literal> instance would be ""shared. If you keep your Hibernate <literal>Session</literal> in your ""<literal>HttpSession</literal> (discussed later), you should consider ""synchronizing access to your Http session. Otherwise, a user that clicks ""reload fast enough may use the same <literal>Session</literal> in two ""concurrently running threads."msgstr """Una <literal>Session</literal> no es segura entre hebras. Las cosas que se ""suponen que funcionan concurrentemente, como peticiones HTTP, beans de ""sesión, o workers de Swing, provocarán condiciones de competencia si una ""instancia de <literal>Session</literal> fuese compartida. Si guardas tu ""<literal>Session</literal> de Hibernate en tu <literal>HttpSession</literal> ""(discutido más adelante), debes considerar sincronizar el acceso a tu sesión ""HTTP. De otro modo, un usuario que hace click lo suficientemente rápido ""puede llegar a usar la misma <literal>Session</literal> en dos hebras ""ejecutándose concurrentemente."#. Tag: para#: transactions.xml:318#, no-c-formatmsgid """An exception thrown by Hibernate means you have to rollback your database ""transaction and close the <literal>Session</literal> immediately (discussed ""later in more detail). If your <literal>Session</literal> is bound to the ""application, you have to stop the application. Rolling back the database ""transaction doesn't put your business objects back into the state they were ""at the start of the transaction. This means the database state and the ""business objects do get out of sync. Usually this is not a problem, because ""exceptions are not recoverable and you have to start over after rollback ""anyway."msgstr """Una excepción lanzada por Hibernate significa que tienes que deshacer ""(rollback) tu transacción de base de datos y cerrar la <literal>Session</""literal> inmediatamente (discutido en más detalle luego). Si tu ""<literal>Session</literal> está ligada a la aplicación, tienes que parar la ""aplicación. Deshacer (rollback) la transacción de base de datos no pone a ""tus objetos de vuelta al estado en que estaban al comienzo de la ""transacción. Esto significa que el estado de la base de datos y los objetos ""de negocio quedan fuera de sincronía. Usualmente esto no es un problema, ""pues las excepciones no son recuperables y tienes que volver a comenzar ""después del rollback de todos modos."#. Tag: para#: transactions.xml:330#, no-c-formatmsgid """The <literal>Session</literal> caches every object that is in persistent ""state (watched and checked for dirty state by Hibernate). This means it ""grows endlessly until you get an OutOfMemoryException, if you keep it open ""for a long time or simply load too much data. One solution for this is to ""call <literal>clear()</literal> and <literal>evict()</literal> to manage the ""<literal>Session</literal> cache, but you most likely should consider a ""Stored Procedure if you need mass data operations. Some solutions are shown ""in <xref linkend=\"batch\"/>. Keeping a <literal>Session</literal> open for ""the duration of a user session also means a high probability of stale data."msgstr """La <literal>Session</literal> pone en caché todo objeto que esté en estado ""persistente (vigilado y chequeado por estado sucio por Hibernate). Esto ""significa que crece sin fin hasta que obtienes una OutOfMemoryException, si ""la mantienes abierta por un largo tiempo o simplemente cargas demasiados ""datos. Una solución para esto es llamar a <literal>clear()</literal> y ""<literal>evict()</literal> para gestionar el caché de la <literal>Session</""literal>, pero probalemente debas considerar un procedimiento almacenado si ""necesitas operaciones de datos masivas. Se muestran algunas soluciones en ""<xref linkend=\"batch\"/>. Mantener una <literal>Session</literal> abierta ""por la duración de una sesión de usuario significa también una alta ""probabilidad de datos añejos."#. Tag: title#: transactions.xml:348#, no-c-formatmsgid "Database transaction demarcation"msgstr "Demarcación de la transacción de base de datos"#. Tag: para#: transactions.xml:350#, no-c-formatmsgid """Datatabase (or system) transaction boundaries are always necessary. No ""communication with the database can occur outside of a database transaction ""(this seems to confuse many developers who are used to the auto-commit ""mode). Always use clear transaction boundaries, even for read-only ""operations. Depending on your isolation level and database capabilities this ""might not be required but there is no downside if you always demarcate ""transactions explicitly. Certainly, a single database transaction is going ""to perform better than many small transactions, even for reading data."msgstr """Los límites de las transacciones de base de datos (o sistema) son siempre ""necesarios. Ninguna comunicación con la base de datos puede darse fuera de ""una transacción de base de datos (esto parece confundir muchos ""desarrolladores acostumbrados al modo auto-commit). Siempre usa límites de ""transacción claros, incluso para las operaciones de sólo lectura. ""Dependiendo del nivel de aislamiento y las capacidades de base de datos, ""esto podría o no ser requerido, pero no hay un merma si siempre demarcas ""explícitamente las transacciones."#. Tag: para#: transactions.xml:360#, no-c-formatmsgid """A Hibernate application can run in non-managed (i.e. standalone, simple Web- ""or Swing applications) and managed J2EE environments. In a non-managed ""environment, Hibernate is usually responsible for its own database ""connection pool. The application developer has to manually set transaction ""boundaries, in other words, begin, commit, or rollback database transactions ""himself. A managed environment usually provides container-managed ""transactions (CMT), with the transaction assembly defined declaratively in ""deployment descriptors of EJB session beans, for example. Programmatic ""transaction demarcation is then no longer necessary."msgstr """Una aplicación Hibernate puede ejecutarse en entornos no manejados (es ""decir, como independiente, Web simple, o aplicaciones Swing) y entornos ""manejados J2EE. En un entorno no manejado, Hibernate es usualmente ""responsable de su propio pool de conexiones de base de datos. El ""desarrollador de aplicaciones tiene que establecer manualmente los límites ""de transacción, en otras palabras, hacer begin, commit, o rollback las ""transacciones de base de datos por sí mismo. Un entorno manejado usualmente ""provee transacciones gestionadas por contenedor, con el ensamble de ""transacción definido declarativamente en descriptores de despliegue de beans ""de sesión EJB, por ejemplo. La demarcación programática de transacciones no ""es más necesario, incluso limpiar (flush) la <literal>Session</literal> es ""hecho automáticamente."#. Tag: para#: transactions.xml:370#, no-c-formatmsgid """However, it is often desirable to keep your persistence layer portable ""between non-managed resource-local environments, and systems that can rely ""on JTA but use BMT instead of CMT. In both cases you'd use programmatic ""transaction demaracation. Hibernate offers a wrapper API called ""<literal>Transaction</literal> that translates into the native transaction ""system of your deployment environment. This API is actually optional, but we ""strongly encourage its use unless you are in a CMT session bean."msgstr """Sin embargo, frecuentemente es deseable mantener portable tu capa de ""persistencia. Hibernate ofrece una API de envoltura llamada ""<literal>Transaction</literal> que se traduce al sistema de transacciones ""nativo de tu entorno de despliegue. Esta API es realmente opcional, pero ""recomendamos fuertemente su uso salvo que estés en un bean de sesión CMT."#. Tag: para#: transactions.xml:379#, no-c-formatmsgid """Usually, ending a <literal>Session</literal> involves four distinct phases:"msgstr """Usualmente, finalizar una <literal>Session</literal> implica cuatro fases ""distintas:"#. Tag: para#: transactions.xml:385#, no-c-formatmsgid "flush the session"msgstr "limpiar (flush) la sesión"#. Tag: para#: transactions.xml:390#, no-c-formatmsgid "commit the transaction"msgstr "comprometer la transacción"#. Tag: para#: transactions.xml:395#, no-c-formatmsgid "close the session"msgstr "cerrar la sesión"#. Tag: para#: transactions.xml:400#, no-c-formatmsgid "handle exceptions"msgstr "manejar excepciones"#. Tag: para#: transactions.xml:406#, no-c-formatmsgid """Flushing the session has been discussed earlier, we'll now have a closer ""look at transaction demarcation and exception handling in both managed- and ""non-managed environments."msgstr """Limpiar la sesión ha sido discutido anteriormente, tendremos ahora una ""mirada más de cerca a la demarcación de transacciones y manejo de ""excepciones en sendos entornos manejado y no manejados."#. Tag: title#: transactions.xml:413#, no-c-formatmsgid "Non-managed environment"msgstr "Entorno no manejado"#. Tag: para#: transactions.xml:415#, no-c-formatmsgid """If a Hibernate persistence layer runs in a non-managed environment, database ""connections are usually handled by simple (i.e. non-DataSource) connection ""pools from which Hibernate obtains connections as needed. The session/""transaction handling idiom looks like this:"msgstr """Si una capa de persistencia Hibernate se ejecuta en un entorno no manejado, ""las conexiones de base de datos son manejadas usualmente por el mecanismo de ""pooling de Hibernate. El idioma manejo de sesión/transacción se ve así:"#. Tag: programlisting#: transactions.xml:422#, no-c-formatmsgid """<![CDATA[// Non-managed environment idiom\n""Session sess = factory.openSession();\n""Transaction tx = null;\n""try {\n""    tx = sess.beginTransaction();\n""\n""    // do some work\n""    ...\n"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -