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

📄 transactions.po

📁 hibernate-distribution-3.3.1.GA-dist.zip源码
💻 PO
📖 第 1 页 / 共 5 页
字号:
"<literal>Session.flush()</literal> ou <literal>Transaction.commit()</""literal> est appelé."#. Tag: para#: transactions.xml:290#, no-c-formatmsgid """This approach leaves Hibernate and the database to worry about concurrency; ""it also provides the best scalability, since guaranteeing identity in single-""threaded units of work only doesn't need expensive locking or other means of ""synchronization. The application never needs to synchronize on any business ""object, as long as it sticks to a single thread per <literal>Session</""literal>. Within a <literal>Session</literal> the application may safely use ""<literal>==</literal> to compare objects."msgstr """Cette approche permet de reléguer à Hibernate et à la base de données sous-""jacente le soin de gérer les problèmes d'accès concurrents. Cette manière de ""faire assure également une meilleure extensibilité de l'application puisque ""assurer l'identité JVM dans un thread ne nécessite pas de mécanismes de ""verrouillage coûteux ou d'autres dispositifs de synchronisation. Une ""application n'aura jamais le besoin de synchroniser des objets d'affaire ""tant qu'elle peut garantir qu'un seul thread aura accès à une instance de ""<literal>Session</literal> . Dans le cadre d'exécution d'un objet ""<literal>Session</literal> , l'application peut utiliser en toute sécurité ""<literal>== </literal> pour comparer des objets."#. Tag: para#: transactions.xml:299#, no-c-formatmsgid """However, an application that uses <literal>==</literal> outside of a ""<literal>Session</literal>, might see unexpected results. This might occur ""even in some unexpected places, for example, if you put two detached ""instances into the same <literal>Set</literal>. Both might have the same ""database identity (i.e. they represent the same row), but JVM identity is by ""definition not guaranteed for instances in detached state. The developer has ""to override the <literal>equals()</literal> and <literal>hashCode()</""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 """Une application qui utiliserait <literal>==</literal> à l'extérieur du cadre ""d'exécution d'une <literal>Session</literal> pourrait obtenir des résultats ""inattendus et causer certains effets de bords. Par exemple, si vous mettez 2 ""objets dans le même <literal>Set</literal> , ceux-ci pourraient avoir la ""même identité BD (i.e. ils représentent le même enregistrement), mais leur ""identité JVM pourrait être différente (elle ne peut, par définition, pas ""être garantie sur deux objets détachés). Le développeur doit donc redéfinir ""l'implémentation des méthodes <literal>equals()</literal> et ""<literal>hashcode()</literal> dans les classes persistantes et y adjoindre ""sa propre notion d'identité. Il existe toutefois une restriction: Il ne faut ""jamais utiliser uniquement l'identifiant de la base de données dans ""l'implémentation de l'égalité; Il faut utiliser une clé d'affaire, ""généralement une combinaison de plusieurs attributs uniques, si possible ""immuables. Les identifiants de base de données vont changer si un objet ""transitoire (transient) devient persistant. Si une instance transitoire est ""contenue dans un <literal>Set</literal> , changer le hashcode brisera le ""contrat du <literal>Set</literal> . Les attributs pour les clés d'affaire ""n'ont pas à être aussi stables que des clés primaires de bases de données. ""Il suffit simplement qu'elles soient stables tant et aussi longtemps que les ""objets sont dans le même <literal>Set</literal> . Veuillez consulter le site ""web Hibernate pour des discussions plus pointues à ce sujet. Notez que ce ""concept n'est pas propre à Hibernate mais bien général à l'implémentation de ""l'identité et de l'égalité en Java."#. Tag: title#: transactions.xml:320#, no-c-formatmsgid "Common issues"msgstr "Problèmes communs"#. Tag: para#: transactions.xml:322#, 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 """Bien qu'il puisse y avoir quelques rares exceptions à cette règle, il est ""recommandé de ne jamais utiliser les anti-patterns <emphasis>session-per- ""user-session</emphasis> et <emphasis>session-per-application</emphasis> . ""Vous trouverez ici- bas quelques problèmes que vous risquez de rencontrer si ""vous en faite l?utilisation. (Ces problèmes pourraient quand même survenir ""avec des patterns recommandés) Assurez-vous de bien comprendre les ""implications de chacun des patterns avant de prendre votre décision."#. Tag: para#: transactions.xml:331#, 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 """L'objet <literal>Session</literal> n?est pas conçu pour être utilisé par de ""multiples threads. En conséquence, les objets potentiellement multi-thread ""comme les requêtes HTTP, les EJB Session et Swing Worker, risquent de ""provoquer des conditions de course dans la <literal>Session</literal> si ""celle-ci est partagée. Dans un environnement web classique, il serait ""préférable de synchroniser les accès à la session http afin d?éviter qu?un ""usager ne recharge une page assez rapidement pour que deux requêtes s?""exécutant dans des threads concurrents n?utilisent la même <literal>Session</""literal> ."#. Tag: para#: transactions.xml:342#, 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 """Lorsque Hibernate lance une exception, le roll back de la transaction en ""cours doit être effectué et la <literal>Session</literal> doit être ""immédiatement fermée. (Ceci sera exploré plus tard dans le chapitre.) Si la ""<literal>Session</literal> est directement associée à une application, il ""faut arrêter l?application. Le roll back de la transaction ne remettra pas ""les objets dans leur état du début de la transaction. Ainsi, ceux-ci ""pourraient être désynchronisés d?avec les enregistrements. (Généralement, ""cela ne cause pas de réels problèmes puisque la plupart des exceptions sont ""non traitables et requièrent la reprise du processus d?affaire ayant échoué.)"#. Tag: para#: transactions.xml:354#, 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> met en mémoire cache tous les objets ""persistants (les objets surveillés et dont l'état est géré par Hibernate.) ""Si la <literal>Session</literal> est ouverte indéfiniment ou si une trop ""grande quantité d'objets y est chargée, l?utilisation de la mémoire peut ""potentiellement croître jusqu?à atteindre le maximum allouable à l?""application (java.lang.OutOfMemoryError.) Une solution à ce problème est d?""appeler les méthodes <literal>Session.clear()</literal> et <literal>Session.""evict()</literal> pour gérer la mémoire cache de la <literal>Session</""literal> . Vous pouvez également utiliser des stored procedures si vous ""devez lancer des traitements sur de grandes quantités d?informations. ""Certaines solutions sont décrites ici : <xref linkend=\"batch\"/> . Garder ""une <literal>Session</literal> ouverte pour toute la durée d?une session ""usager augmente également considérablement le risque de travailler avec de l?""information périmée."#. Tag: title#: transactions.xml:372#, no-c-formatmsgid "Database transaction demarcation"msgstr "Démarcation des transactions"#. Tag: para#: transactions.xml:374#, fuzzy, no-c-formatmsgid """Database (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 """La démarcation des transactions est importante dans le design d?une ""application. Aucune communication avec la base de données ne peut être ""effectuée à l?extérieur du cadre d?une transaction. (Il semble que ce ""concept soit mal compris par plusieurs développeurs trop habitués à utiliser ""le mode auto-commit.) Même si certains niveaux d'isolation et certaines ""possibilités offertes par les bases de données permettent de l?éviter, il ""n'est jamais désavantageux de toujours explicitement indiquer les bornes de ""transaction pour les opérations complexes comme pour les opérations simples ""de lecture."#. Tag: para#: transactions.xml:384#, 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 """Une application utilisant Hibernate peut s'exécuter dans un environnement ""léger n?offrant pas la gestion automatique des transactions (application ""autonome, application web simple ou applications Swing) ou dans un ""environnement J2EE offrant des services de gestion automatique des ""transactions JTA. Dans un environnement simple, Hibernate a généralement la ""responsabilité de la gestion de son propre pool de connexions à la base de ""données. Le développeur de l'application doit manuellement délimiter les ""transactions. En d'autres mots, il appartient au développeur de gérer les ""appels à <literal>Transaction.begin()</literal> , <literal>Transaction.commit""()</literal> et <literal>Transaction.rollback()</literal> . Un environnement ""transactionnel J2EE (serveur d'application J2EE) doit offrir la gestion des ""transactions au niveau du container J2EE. Les bornes de transaction peuvent ""normalement être définies de manière déclarative dans les descripteurs de ""déploiement d'EJB Session, par exemple. La gestion programmatique des ""transactions n'y est donc pas nécessaire. Même les appels à <literal>Session.""flush()</literal> sont faits automatiquement."#. Tag: para#: transactions.xml:394#, fuzzy, 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 demarcation. 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 """Il peut être requis d'avoir une couche de persistance portable. Hibernate ""offre donc une API appelée <literal>Transaction</literal> qui sert ""d'enveloppe pour le système de transaction natif de l'environnement de ""déploiement. Il n'est pas obligatoire d'utiliser cette API mais il est ""fortement conseillé de le faire, sauf lors de l'utilisation de CMT Session ""Bean (EJB avec transactions gérées automatiquement par le container EJB)."#. Tag: para#: transactions.xml:403#, no-c-formatmsgid """Usually, ending a <literal>Session</literal> involves four distinct phases:"msgstr """Il existe quatre étapes disctinctes lors de la fermeture d'une ""<literal>Session</literal>"#. Tag: para#: transactions.xml:409#, no-c-formatmsgid "flush the session"msgstr "flush de la session"#. Tag: para#: transactions.xml:414#, no-c-formatmsgid "commit the transaction"msgstr "commit de la transaction"#. Tag: para#: transactions.xml:419

⌨️ 快捷键说明

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