Nous avons 2 applications web java en lecture/écriture et 3 applications de lecture/écriture java autonomes (on charge des questions par email, on traite un flux xml, on envoie des emails aux abonnés) hiberner et partager une base de code commune.Intégrité de base de données Hibernate avec plusieurs applications Java
Le problème que nous avons récemment rencontré est que les questions chargées par e-mail remplacent parfois les questions créées dans l'une des applications Web. Notez que ce sont des questions distinctes qui devraient avoir des identifiants séparés. Nous pensions initialement que c'était un problème de mise en cache. Nous avons essayé de désactiver le cache de second niveau, mais cela ne fait pas de différence.
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
Question:
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
@DocumentId
public Integer getId() {
return this.id;
}
Nous utilisons MySQL btw.
CREATE TABLE `question` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
...
PRIMARY KEY (`id`),
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Nous ne sommes pas explicitement ouvrirons et la fermeture de sessions, mais laissez-les gérer via Util.getSessionFactory().getCurrentSession()
mise en veille prolongée. Nous préférons ne pas configurer de cache de second niveau en cluster à ce stade, car cela crée une autre couche de complexité et nous sommes plus que satisfaits du niveau de performance que nous obtenons de l'application dans son ensemble.
La mise en œuvre d'un modèle de session ouverte en vue dans les applications Web et la gestion manuelle des sessions dans les applications autonomes semblent-elles résoudre ce problème?
Ou d'autres suggestions/idées s'il vous plaît?
Comment les questions identifiées (aussi quelle est la clé primaire) sont les mises à jour du courrier et du Web à la même question? – Mark
Il semble que la clé primaire soit générée par les applications au lieu d'utiliser une séquence gérée par la base de données. – khmarbaise
Salut, juste mis à jour ma question avec plus d'informations pour vous. Je pensais que la stratégie IDENTITY a provoqué la génération de l'identifiant par MySQL? – Austen