Enregistrer un nouvel objet avec Hibernate à l'aide fournie ID
Je veux sauver quelques Objets de base de données prédéfinie de l'Id de l'utilisation d'Hibernate. Est-il possible de le faire à l'aide de méthode d'enregistrement de la session Hibernate?
Je sais qu'il existe des solutions de contournement suivantes:
1) exécuter le script SQL nécessaires les instructions insert:
insert into MyObj(id,name) values (100,'aaa'), (101,'bbb');
2) l'utilisation de requêtes SQL en mode veille prolongée:
public static boolean createObj(Long id, String name) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
if (session.get(MyObj.class, id) == null) {
session.beginTransaction();
SQLQuery sqlQuery = session.createSQLQuery
("insert into myobj(id,name) values(?,?)");
sqlQuery.setLong(0, id);
sqlQuery.setString(1, name);
sqlQuery.executeUpdate();
session.getTransaction().commit();
return true;
} else {
return false;
}
}
Mais: est-il possible de le faire sans SQLQuery?
En veille prolongée de référence dans la section 11.2. Fabrication d'objets persistants il est un exemple de code:
Alternativement, vous pouvez assigner le
identifiant en utilisant une version surchargée
de save().
DomesticCat pk = new DomesticCat();
pk.setColor(Color.TABBY);
pk.setSex('F');
pk.setName("PK");
pk.setKittens( new HashSet() );
pk.addKitten(fritz);
sess.save( pk, new Long(1234) );
Mais je n'arrivais pas à trouver d'exemple de comment faire cela.
Donc est-il possible d'enregistrer de nouveaux objets avec fourni Id de base de données avec Hibernate pas à l'aide d'une requête SQL? Si oui, alors comment?
Et comment surcharge session de la méthode save() comme mentionné dans Hibernate référence?
Merci!
OriginalL'auteur iryndin | 2010-10-28
Vous devez vous connecter pour publier un commentaire.
La documentation vous demande de ne pas remplacer
save
vous-même, mais l'utilisation de la variante desave
qui prend deux arguments. Voir la [documentation Javadoc][1] pour plus de détails.[1]: http://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/Session.html#save(java.lang.Chaîne, java.lang.Objet)
save
Eh, le bon lien est: docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/..., java.io.Serializable)
La seule variante de
Save()
à l'aide de deux args prend une chaîne et puis l'objet lui-même... n'est pas une clé.en 3.6 Javadoc, je vois encore la méthode mentionnée ci-dessus: rouge.ht/1hHZwLT
Oui, mais c'est un interface, namespace (à savoir,
org.hibernate.classic
). Pas sûr de la façon que peut jamais être utile, car il est tout simplement pas là dans l'objet session je obtenir..OriginalL'auteur Binil Thomas
Session d'utilisation.répliquer
OriginalL'auteur alkimisticus
Spécifier
assigned
comme le générateur sur la colonne ID.http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html#mapping-declaration-id-generator
Notez que pour que cela fonctionne bien, il aide à avoir un nullable version propriété. Hibernate puis traite 'null' version des valeurs comme étant non enregistrées.
Espère que cette aide.
OriginalL'auteur Thomas W
Pour l'instant
replicate(Object object, ReplicationMode replicationMode)
semble être une solution acceptable et la voie préférée. Vous pouvez jouer un peu avec les différentes valeurs deReplicationMode
pour répondre à vos besoins.OriginalL'auteur Christian Gürtler
Utiliser la méthode save de mise en veille prolongée:-
enregistrer(String entityName,Objet)
Pour plus d'informations merci de suivre:-
http://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/Session.html#save(java.lang.Chaîne, java.lang.Objet)
Remarque:- Ne pas utiliser GeneratedValue de tout type sur au-dessus de votre clé Primaire
@GeneratedValue(stratégie=GenerationType.IDENTITÉ)
OriginalL'auteur Vinit Bhardwaj