Hibernate - exemple d'attribut d'insertion dynamique
Qu'est-ce que l'insertion dynamique
L'attribut dynamic-insert indique à Hibernate s'il faut inclure les propriétés nulles dans l'instruction SQL INSERT. Explorons quelques exemples pour mieux le comprendre.
Exemple d'insertion dynamique
1. insert dynamique = faux
La valeur par défaut de dynamic-insert est false, ce qui signifieinclude null properties dans l'instruction SQL INSERT d'Hibernate.
Par exemple, essayez de définir des valeurs nulles pour les propriétés d'un objet et enregistrez-le.
StockTransaction stockTran = new StockTransaction(); //stockTran.setPriceOpen(new Float("1.2")); //stockTran.setPriceClose(new Float("1.1")); //stockTran.setPriceChange(new Float("10.0")); stockTran.setVolume(2000000L); stockTran.setDate(new Date()); stockTran.setStock(stock); session.save(stockTran);
Activez Hibernate «show_sql» sur true, vous verrez l'instruction SQL d'insertion suivante.
Hibernate: insert into example.stock_transaction (DATE, PRICE_CHANGE, PRICE_CLOSE, PRICE_OPEN, STOCK_ID, VOLUME) values (?, ?, ?, ?, ?, ?)
Hibernate will generate the unnecessary columns (PRICE_CHANGE, PRICE_CLOSE, PRICE_OPEN) pour l'insertion.
2. insert dynamique = vrai
Si vous définissez l'insertion dynamique sur true, ce qui signifieexclude null property values dans l'instruction SQL INSERT d'Hibernate.
Par exemple, essayez de définir des valeurs nulles pour les propriétés d'un objet et enregistrez-le à nouveau.
StockTransaction stockTran = new StockTransaction(); //stockTran.setPriceOpen(new Float("1.2")); //stockTran.setPriceClose(new Float("1.1")); //stockTran.setPriceChange(new Float("10.0")); stockTran.setVolume(2000000L); stockTran.setDate(new Date()); stockTran.setStock(stock); session.save(stockTran);
Activez Hibernate «show_sql» sur true. Vous verrez les différentes instructions d'insertion SQL.
Hibernate: insert into example.stock_transaction (DATE, STOCK_ID, VOLUME) values (?, ?, ?)
Hibernate will generate only the necessary columns (DATE, STOCK_ID, VOLUME) pour l'insertion.
Problème de performance
Dans certaines situations, comme une très grande table avec des centaines de colonnes (conception héritée), ou une table contenant un volume de données extrêmement important, insérer quelque chose de non nécessaire réduira définitivement les performances de votre système.
Comment le configurer
Vous pouvez configurer la valeur des propriétés d'insertion dynamique via une annotation ou un fichier de mappage XML.
1. Annotation
@Entity @Table(name = "stock_transaction", catalog = "example") @org.hibernate.annotations.Entity( dynamicInsert = true ) public class StockTransaction implements java.io.Serializable {
2. Mappage XML
Conclusion
Ce petit ajustement «dynamic-insert» peut augmenter les performances de votre système et vous recommande vivement de le faire. Cependant, une question dans mon esprit est pourquoi Hibernate l'a défini sur false par défaut?
Suivre
1. Hibernation - Exemple dedynamic-update attribute