{"id":476,"date":"2025-03-24T08:53:26","date_gmt":"2025-03-23T23:53:26","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=476"},"modified":"2025-03-24T08:53:26","modified_gmt":"2025-03-23T23:53:26","slug":"%e3%80%902024%e5%b9%b4%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91hibernate%e3%81%ae%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bc%9a13%e3%81%ae%e3%83%99%e3%82%b9%e3%83%88%e3%83%97%e3%83%a9%e3%82%af","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=476","title":{"rendered":"\u30102024\u5e74\u4fdd\u5b58\u7248\u3011Hibernate\u306e\u5b8c\u5168\u30ac\u30a4\u30c9\uff1a13\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">Hibernate\u3068\u306f\uff1f\u521d\u5fc3\u8005\u3067\u3082\u308f\u304b\u308b\u57fa\u790e\u77e5\u8b58<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">Java\u6700\u5f37\u306eOR\u30de\u30c3\u30d4\u30f3\u30b0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u300cHibernate\u300d\u306e\u7279\u5fb4<\/a>      <\/li>      <li>        <a href=\"#i-2\">\u306a\u305cHibernate\u304c\u591a\u304f\u306e\u958b\u767a\u73fe\u5834\u3067\u9078\u3070\u308c\u3066\u3044\u308b\u306e\u304b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">\u57fa\u672c\u7684\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-4\">Hibernate\u306e\u30e1\u30ea\u30c3\u30c8\u30fb\u30c7\u30e1\u30ea\u30c3\u30c8\u3092\u5fb9\u5e95\u89e3\u8aac<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-5\">\u958b\u767a\u52b9\u7387\u3092\u5287\u7684\u306b\u5411\u4e0a\u3055\u305b\u308b7\u3064\u306e\u30e1\u30ea\u30c3\u30c8<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-6\">\u5b9f\u969b\u306e\u73fe\u5834\u3067\u76f4\u9762\u3059\u308b4\u3064\u306e\u8ab2\u984c\u3068\u5bfe\u51e6\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-7\">Hibernate\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\uff1a\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u89e3\u8aac<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-8\">\u74b0\u5883\u69cb\u7bc9\u304b\u3089Hello World\u307e\u3067\u306e\u624b\u9806<\/a>      <\/li>      <li>        <a href=\"#i-9\">\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u4f5c\u6210\u3068\u30de\u30c3\u30d4\u30f3\u30b0\u8a2d\u5b9a\u306e\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-10\">CRUD\u64cd\u4f5c\u306e\u5b9f\u88c5\u65b9\u6cd5\u3068\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-11\">\u5b9f\u88c5\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-12\">\u73fe\u5834\u3067\u4f7f\u3048\u308b\uff01Hibernate\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b913\u9078<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-13\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u9069\u5316\u3059\u308b5\u3064\u306e\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li>        <a href=\"#i-14\">\u4fdd\u5b88\u6027\u3092\u9ad8\u3081\u308b4\u3064\u306e\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u898f\u7d04<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-15\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u5f37\u5316\u3059\u308b4\u3064\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-16\">Hibernate\u306e\u5fdc\u7528\uff1a\u5b9f\u8df5\u7684\u306a\u958b\u767a\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-17\">\u30ad\u30e3\u30c3\u30b7\u30e5\u6a5f\u80fd\u3092\u4f7f\u3044\u3053\u306a\u3059\u305f\u3081\u306e\u30ce\u30a6\u30cf\u30a6<\/a>      <\/li>      <li>        <a href=\"#i-18\">\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/a>      <\/li>      <li>        <a href=\"#i-19\">\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u3067\u306eHibernate\u306e\u6d3b\u7528\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-20\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-21\">\u3088\u304f\u3042\u308b\u30c8\u30e9\u30d6\u30eb\u3068\u89e3\u6c7a\u65b9\u6cd5\uff1a\u73fe\u5834\u306e\u30b1\u30fc\u30b9\u30b9\u30bf\u30c7\u30a3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-22\">N+1\u554f\u984c\u306e\u5bfe\u51e6\u6cd5\u3068\u5b9f\u88c5\u4f8b<\/a>      <\/li>      <li>        <a href=\"#i-23\">\u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u56de\u907f\u306e\u305f\u3081\u306e\u30a2\u30d7\u30ed\u30fc\u30c1<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-24\">\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u9632\u3050\u305f\u3081\u306e\u8a2d\u5b9a\u3068\u904b\u7528\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-25\">\u307e\u3068\u3081\uff1aHibernate\u5c0e\u5165\u306e\u5b9f\u8df5\u30ed\u30fc\u30c9\u30de\u30c3\u30d7<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-26\">\u672c\u8a18\u4e8b\u3067\u89e3\u8aac\u3057\u305f\u91cd\u8981\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-27\">\u5b9f\u8df5\u6295\u5165\u3078\u306e\u30b9\u30c6\u30c3\u30d7<\/a>      <\/li>      <li>        <a href=\"#i-28\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-29\">\u6700\u5f8c\u306b<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">Hibernate\u3068\u306f\uff1f\u521d\u5fc3\u8005\u3067\u3082\u308f\u304b\u308b\u57fa\u790e\u77e5\u8b58<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">Java\u6700\u5f37\u306eOR\u30de\u30c3\u30d4\u30f3\u30b0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u300cHibernate\u300d\u306e\u7279\u5fb4<\/h3>\n\n\n\n<p>Hibernate\u306f\u3001Java\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u3092\u30b7\u30f3\u30d7\u30eb\u304b\u3064\u30d1\u30ef\u30d5\u30eb\u306b\u3059\u308bOR\u30de\u30c3\u30d4\u30f3\u30b0\uff08Object-Relational Mapping\uff1aORM\uff09\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30c6\u30fc\u30d6\u30eb\u3068Java\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u81ea\u52d5\u7684\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3059\u308b\u3053\u3068\u3067\u3001\u958b\u767a\u8005\u306fSQL\u3092\u76f4\u63a5\u66f8\u304f\u3053\u3068\u306a\u304f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\"><strong>\u4e3b\u8981\u306a\u7279\u5fb4\uff1a<\/strong><\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ol class=\"wp-block-list\">\n<li><strong>\u81ea\u52d5\u30de\u30c3\u30d4\u30f3\u30b0\u6a5f\u80fd<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30c6\u30fc\u30d6\u30eb\u3068Java\u30af\u30e9\u30b9\u306e\u81ea\u52d5\u30de\u30c3\u30d4\u30f3\u30b0<\/li>\n\n\n\n<li>\u4e3b\u30ad\u30fc\u30fb\u5916\u90e8\u30ad\u30fc\u306e\u81ea\u52d5\u7ba1\u7406<\/li>\n\n\n\n<li>\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u306e\u81ea\u52d5\u51e6\u7406<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u5f37\u529b\u306a\u30af\u30a8\u30ea\u8a00\u8a9e<\/strong>\n<ul class=\"wp-block-list\">\n<li>HQL\uff08Hibernate Query Language\uff09\u306e\u63d0\u4f9b<\/li>\n\n\n\n<li>Criteria API\u306b\u3088\u308b\u578b\u5b89\u5168\u306a\u30af\u30a8\u30ea\u69cb\u7bc9<\/li>\n\n\n\n<li>\u30cd\u30a4\u30c6\u30a3\u30d6SQL\u306e\u30b5\u30dd\u30fc\u30c8<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u6a5f\u69cb<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u4e00\u6b21\u30ad\u30e3\u30c3\u30b7\u30e5\uff08\u30bb\u30c3\u30b7\u30e7\u30f3\u30ec\u30d9\u30eb\uff09<\/li>\n\n\n\n<li>\u4e8c\u6b21\u30ad\u30e3\u30c3\u30b7\u30e5\uff08\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30ec\u30d9\u30eb\uff09<\/li>\n\n\n\n<li>\u30af\u30a8\u30ea\u30ad\u30e3\u30c3\u30b7\u30e5<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u8c4a\u5bcc\u306a\u30c7\u30fc\u30bf\u578b\u30b5\u30dd\u30fc\u30c8<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u57fa\u672c\u30c7\u30fc\u30bf\u578b<\/li>\n\n\n\n<li>\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u578b<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u578b\u306e\u30b5\u30dd\u30fc\u30c8<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u306a\u305cHibernate\u304c\u591a\u304f\u306e\u958b\u767a\u73fe\u5834\u3067\u9078\u3070\u308c\u3066\u3044\u308b\u306e\u304b<\/h3>\n\n\n\n<p>Hibernate\u304c\u5e83\u304f\u63a1\u7528\u3055\u308c\u3066\u3044\u308b\u7406\u7531\u306f\u3001\u4ee5\u4e0b\u306e\u70b9\u306b\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u751f\u7523\u6027\u306e\u5411\u4e0a<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30dc\u30a4\u30e9\u30fc\u30d7\u30ec\u30fc\u30c8\u30b3\u30fc\u30c9\u306e\u524a\u6e1b<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306e\u7c21\u7d20\u5316<\/li>\n\n\n\n<li>\u81ea\u52d5\u7684\u306aSQL\u30af\u30a8\u30ea\u751f\u6210<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u4fdd\u5b88\u6027\u306e\u9ad8\u3055<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5f93\u6765\u306eJDBC\u306b\u3088\u308b\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\nPreparedStatement stmt = connection.prepareStatement(\n    \"SELECT * FROM users WHERE id = ?\"\n);\nstmt.setLong(1, userId);\nResultSet rs = stmt.executeQuery();\nUser user = null;\nif (rs.next()) {\n    user = new User();\n    user.setId(rs.getLong(\"id\"));\n    user.setName(rs.getString(\"name\"));\n    \/\/ ... \u305d\u306e\u4ed6\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u8a2d\u5b9a\n}\n\n\/\/ Hibernate\u306b\u3088\u308b\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\nUser user = session.get(User.class, userId);<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u975e\u4f9d\u5b58<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u69d8\u3005\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u5bfe\u5fdc<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u79fb\u884c\u306e\u5bb9\u6613\u3055<\/li>\n\n\n\n<li>\u65b9\u8a00\uff08Dialect\uff09\u306b\u3088\u308b\u6700\u9069\u5316<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u6a5f\u80fd<\/strong> \u6a5f\u80fd \u8aac\u660e \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406 JTA\u3068\u306e\u7d71\u5408\u3001\u5206\u6563\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u306e\u30b5\u30dd\u30fc\u30c8 \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30ea\u30f3\u30b0 \u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306e\u7ba1\u7406 \u76e3\u67fb\u30ed\u30b0 \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u5909\u66f4\u5c65\u6b74\u306e\u81ea\u52d5\u8a18\u9332 \u30d0\u30c3\u30c1\u51e6\u7406 \u5927\u91cf\u30c7\u30fc\u30bf\u306e\u52b9\u7387\u7684\u306a\u51e6\u7406<\/li>\n\n\n\n<li><strong>Spring Framework\u3068\u306e\u89aa\u548c\u6027<\/strong>\n<ul class=\"wp-block-list\">\n<li>Spring Data JPA\u3092\u901a\u3058\u305f\u7d71\u5408<\/li>\n\n\n\n<li>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u7d71\u5408<\/li>\n\n\n\n<li>\u8a2d\u5b9a\u306e\u7c21\u7d20\u5316<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">\u57fa\u672c\u7684\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/h3>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">Hibernate\u306e\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\uff1a<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ul class=\"wp-block-list\">\n<li><strong>SessionFactory<\/strong>: \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u3067\u5171\u6709\u3055\u308c\u308b\u91cd\u91cf\u7d1a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8<\/li>\n\n\n\n<li><strong>Session<\/strong>: \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u5bfe\u8a71\u3092\u62c5\u3046\u8efd\u91cf\u7d1a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8<\/li>\n\n\n\n<li><strong>Transaction<\/strong>: \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306e\u5358\u4f4d\u3092\u7ba1\u7406<\/li>\n\n\n\n<li><strong>Query<\/strong>: \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u30af\u30a8\u30ea\u3092\u8868\u73fe<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Hibernate\u306e\u57fa\u672c\u7684\u306a\u4f7f\u7528\u4f8b\nSessionFactory sessionFactory = configuration.buildSessionFactory();\nSession session = sessionFactory.openSession();\nTransaction tx = null;\n\ntry {\n    tx = session.beginTransaction();\n\n    \/\/ \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u4fdd\u5b58\n    User user = new User(\"John Doe\");\n    session.save(user);\n\n    tx.commit();\n} catch (Exception e) {\n    if (tx != null) tx.rollback();\n    throw e;\n} finally {\n    session.close();\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001Hibernate\u306f\u8c4a\u5bcc\u306a\u6a5f\u80fd\u3068\u4f7f\u3044\u3084\u3059\u3044API\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u3067\u3001Java\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3051\u308b\u4e8b\u5b9f\u4e0a\u306e\u6a19\u6e96ORM\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u3057\u3066\u306e\u5730\u4f4d\u3092\u78ba\u7acb\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-4\">Hibernate\u306e\u30e1\u30ea\u30c3\u30c8\u30fb\u30c7\u30e1\u30ea\u30c3\u30c8\u3092\u5fb9\u5e95\u89e3\u8aac<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u958b\u767a\u52b9\u7387\u3092\u5287\u7684\u306b\u5411\u4e0a\u3055\u305b\u308b7\u3064\u306e\u30e1\u30ea\u30c3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u751f\u7523\u6027\u306e\u5927\u5e45\u306a\u5411\u4e0a<\/strong>\n<ul class=\"wp-block-list\">\n<li>SQL\u306e\u624b\u52d5\u8a18\u8ff0\u304c\u4e0d\u8981<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c6\u30fc\u30d6\u30eb\u306e\u81ea\u52d5\u751f\u6210<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u578b\u306e\u81ea\u52d5\u5909\u63db<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u5f93\u6765\u306eJDBC\u3067\u306e\u30c7\u30fc\u30bf\u633f\u5165\n   String sql = \"INSERT INTO users (name, email, created_at) VALUES (?, ?, ?)\";\n   PreparedStatement stmt = connection.prepareStatement(sql);\n   stmt.setString(1, user.getName());\n   stmt.setString(2, user.getEmail());\n   stmt.setTimestamp(3, new Timestamp(System.currentTimeMillis()));\n   stmt.executeUpdate();\n\n   \/\/ Hibernate\u3067\u306e\u30c7\u30fc\u30bf\u633f\u5165\n   session.save(user); \/\/ \u305f\u3063\u305f\u3053\u308c\u3060\u3051\uff01<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u975e\u4f9d\u5b58\u6027<\/strong> \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 Hibernate\u306e\u5bfe\u5fdc\u65b9\u6cd5 MySQL MySQLDialect\u306b\u3088\u308b\u6700\u9069\u5316 PostgreSQL PostgreSQLDialect\u306b\u3088\u308b\u6700\u9069\u5316 Oracle OracleDialect\u306b\u3088\u308b\u6700\u9069\u5316 SQL Server SQLServerDialect\u306b\u3088\u308b\u6700\u9069\u5316<\/li>\n\n\n\n<li><strong>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u7c21\u7d20\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u7c21\u7d20\u5316\u4f8b\n   @Transactional\n   public void updateUserProfile(User user) {\n       userRepository.save(user); \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u306f\u81ea\u52d5\u7684\u306b\u7ba1\u7406\u3055\u308c\u308b\n   }<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u6a5f\u80fd\u306b\u3088\u308b\u6027\u80fd\u6700\u9069\u5316<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u4e00\u6b21\u30ad\u30e3\u30c3\u30b7\u30e5\uff08\u30bb\u30c3\u30b7\u30e7\u30f3\u30ad\u30e3\u30c3\u30b7\u30e5\uff09<\/li>\n\n\n\n<li>\u4e8c\u6b21\u30ad\u30e3\u30c3\u30b7\u30e5\uff08\u30b0\u30ed\u30fc\u30d0\u30eb\u30ad\u30e3\u30c3\u30b7\u30e5\uff09<\/li>\n\n\n\n<li>\u30af\u30a8\u30ea\u30ad\u30e3\u30c3\u30b7\u30e5<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li><strong>\u8c4a\u5bcc\u306a\u30af\u30a8\u30ea\u65b9\u6cd5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ JPQL\u306b\u3088\u308b\u30af\u30a8\u30ea\n   String jpql = \"SELECT u FROM User u WHERE u.age &gt; :age\";\n   List&lt;User&gt; users = session.createQuery(jpql)\n       .setParameter(\"age\", 20)\n       .getResultList();\n\n   \/\/ Criteria API\u306b\u3088\u308b\u578b\u5b89\u5168\u306a\u30af\u30a8\u30ea\n   CriteriaBuilder cb = session.getCriteriaBuilder();\n   CriteriaQuery&lt;User&gt; query = cb.createQuery(User.class);\n   Root&lt;User&gt; root = query.from(User.class);\n   query.select(root).where(cb.gt(root.get(\"age\"), 20));<\/pre>\n\n\n\n<ol start=\"6\" class=\"wp-block-list\">\n<li><strong>\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   Session session = sessionFactory.openSession();\n   Transaction tx = session.beginTransaction();\n\n   for (int i = 0; i &lt; 100000; i++) {\n       User user = new User(\"User \" + i);\n       session.save(user);\n       if (i % 50 == 0) { \/\/ 50\u4ef6\u3054\u3068\u306b\u30d5\u30e9\u30c3\u30b7\u30e5\u3057\u3066\u30e1\u30e2\u30ea\u3092\u89e3\u653e\n           session.flush();\n           session.clear();\n       }\n   }\n   tx.commit();<\/pre>\n\n\n\n<ol start=\"7\" class=\"wp-block-list\">\n<li><strong>\u76e3\u67fb\u30ed\u30b0\u306e\u81ea\u52d5\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   @Entity\n   @Audited \/\/ Hibernate\u30a8\u30f3\u30d0\u30fc\u30b9\u306b\u3088\u308b\u76e3\u67fb\u30ed\u30b0\u306e\u81ea\u52d5\u5316\n   public class User {\n       @Id\n       private Long id;\n       private String name;\n       \/\/ ...\n   }<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u5b9f\u969b\u306e\u73fe\u5834\u3067\u76f4\u9762\u3059\u308b4\u3064\u306e\u8ab2\u984c\u3068\u5bfe\u51e6\u6cd5<\/h3>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\"><strong>\u5b66\u7fd2\u66f2\u7dda\u306e\u6025\u5cfb\u3055<\/strong><\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#fff9e6;color:#ffb36b\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#ffb36b\"><i class=\"fas fa-pencil-alt\"><\/i><\/span><div class=\"sng-box-msg__title\"><strong>\u8ab2\u984c<\/strong>: <\/div><\/div><div class=\"sng-box-msg__contents\">\n<p>\u521d\u671f\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u9ad8\u3044<\/p>\n<\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#b4e0fa;color:#009EF3\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#009EF3\"><i class=\"far fa-lightbulb\"><\/i><\/span><div class=\"sng-box-msg__title\"><strong>\u5bfe\u51e6\u6cd5<\/strong>:<\/div><\/div><div class=\"sng-box-msg__contents\">\n<ul class=\"wp-block-list\">\n<li>\u6bb5\u968e\u7684\u306a\u5b66\u7fd2\u30a2\u30d7\u30ed\u30fc\u30c1<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u5185\u3067\u306e\u77e5\u8b58\u5171\u6709\u30bb\u30c3\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>\u30b5\u30f3\u30d7\u30eb\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6d3b\u7528<\/li>\n<\/ul>\n<\/div><\/div><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\"><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316<\/strong><\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#fff9e6;color:#ffb36b\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#ffb36b\"><i class=\"fas fa-pencil-alt\"><\/i><\/span><div class=\"sng-box-msg__title\"><strong>\u8ab2\u984c<\/strong>: <\/div><\/div><div class=\"sng-box-msg__contents\">\n<p>N+1\u554f\u984c\u3084\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u5897\u5927<\/p>\n<\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#b4e0fa;color:#009EF3\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#009EF3\"><i class=\"far fa-lightbulb\"><\/i><\/span><div class=\"sng-box-msg__title\"><strong>\u5bfe\u51e6\u6cd5<\/strong>:<\/div><\/div><div class=\"sng-box-msg__contents\">\n<p><code>java \/\/ N+1\u554f\u984c\u306e\u89e3\u6c7a\u4f8b @Entity public class User { @OneToMany(fetch = FetchType.LAZY) \/\/ \u9045\u5ef6\u30ed\u30fc\u30c9\u306e\u9069\u7528 @BatchSize(size = 25) \/\/ \u30d0\u30c3\u30c1\u30b5\u30a4\u30ba\u306e\u6307\u5b9a private List&lt;Order&gt; orders; }<\/code><\/p>\n<\/div><\/div><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\"><strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u4e92\u63db\u6027<\/strong><\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#fff9e6;color:#ffb36b\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#ffb36b\"><i class=\"fas fa-pencil-alt\"><\/i><\/span><div class=\"sng-box-msg__title\"><strong>\u8ab2\u984c<\/strong>: <\/div><\/div><div class=\"sng-box-msg__contents\">\n<p>\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u306b\u3088\u308b\u4e92\u63db\u6027\u306e\u554f\u984c<\/p>\n<\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#b4e0fa;color:#009EF3\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#009EF3\"><i class=\"far fa-lightbulb\"><\/i><\/span><div class=\"sng-box-msg__title\"><strong>\u5bfe\u51e6\u6cd5<\/strong>:<\/div><\/div><div class=\"sng-box-msg__contents\">\n<ul class=\"wp-block-list\">\n<li>\u30d0\u30fc\u30b8\u30e7\u30f3\u79fb\u884c\u8a08\u753b\u306e\u7b56\u5b9a<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u306e\u81ea\u52d5\u5316<\/li>\n\n\n\n<li>\u6bb5\u968e\u7684\u306a\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9<\/li>\n<\/ul>\n<\/div><\/div><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\"><strong>\u30c7\u30d0\u30c3\u30b0\u306e\u8907\u96d1\u3055<\/strong><\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#fff9e6;color:#ffb36b\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#ffb36b\"><i class=\"fas fa-pencil-alt\"><\/i><\/span><div class=\"sng-box-msg__title\"><strong>\u8ab2\u984c<\/strong>: <\/div><\/div><div class=\"sng-box-msg__contents\">\n<p>\u81ea\u52d5\u751f\u6210\u3055\u308c\u308bSQL\u306e\u8ffd\u8de1\u304c\u56f0\u96e3<\/p>\n<\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#b4e0fa;color:#009EF3\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#009EF3\"><i class=\"far fa-lightbulb\"><\/i><\/span><div class=\"sng-box-msg__title\"><strong>\u5bfe\u51e6\u6cd5<\/strong>:<\/div><\/div><div class=\"sng-box-msg__contents\">\n<p><code>properties # application.properties hibernate.show_sql=true hibernate.format_sql=true logging.level.org.hibernate.type.descriptor.sql=trace<\/code><\/p>\n<\/div><\/div><\/div>\n<\/div><\/div>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u8ab2\u984c\u306b\u5bfe\u3057\u3066\u306f\u3001\u30c1\u30fc\u30e0\u5168\u4f53\u3067\u306e\u7406\u89e3\u3068\u9069\u5207\u306a\u5bfe\u7b56\u306e\u5b9f\u65bd\u304c\u91cd\u8981\u3067\u3059\u3002\u7279\u306b\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u53d6\u308a\u306a\u304c\u3089\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5408\u308f\u305b\u3066\u9069\u5207\u306a\u5bfe\u7b56\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u6210\u529f\u306e\u9375\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-7\">Hibernate\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\uff1a\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u89e3\u8aac<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u74b0\u5883\u69cb\u7bc9\u304b\u3089Hello World\u307e\u3067\u306e\u624b\u9806<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Maven\u4f9d\u5b58\u95a2\u4fc2\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;dependencies&gt;\n    &lt;!-- Hibernate Core --&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;org.hibernate&lt;\/groupId&gt;\n        &lt;artifactId&gt;hibernate-core&lt;\/artifactId&gt;\n        &lt;version&gt;5.6.15.Final&lt;\/version&gt;\n    &lt;\/dependency&gt;\n\n    &lt;!-- \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c9\u30e9\u30a4\u30d0\u30fc\uff08MySQL\u4f8b\uff09 --&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;mysql&lt;\/groupId&gt;\n        &lt;artifactId&gt;mysql-connector-java&lt;\/artifactId&gt;\n        &lt;version&gt;8.0.33&lt;\/version&gt;\n    &lt;\/dependency&gt;\n&lt;\/dependencies&gt;<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>hibernate.cfg.xml\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;!DOCTYPE hibernate-configuration PUBLIC\n    \"-\/\/Hibernate\/Hibernate Configuration DTD 3.0\/\/EN\"\n    \"http:\/\/www.hibernate.org\/dtd\/hibernate-configuration-3.0.dtd\"&gt;\n&lt;hibernate-configuration&gt;\n    &lt;session-factory&gt;\n        &lt;!-- \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u8a2d\u5b9a --&gt;\n        &lt;property name=\"hibernate.connection.driver_class\"&gt;com.mysql.cj.jdbc.Driver&lt;\/property&gt;\n        &lt;property name=\"hibernate.connection.url\"&gt;jdbc:mysql:\/\/localhost:3306\/test_db&lt;\/property&gt;\n        &lt;property name=\"hibernate.connection.username\"&gt;root&lt;\/property&gt;\n        &lt;property name=\"hibernate.connection.password\"&gt;password&lt;\/property&gt;\n\n        &lt;!-- Hibernate\u8a2d\u5b9a --&gt;\n        &lt;property name=\"hibernate.dialect\"&gt;org.hibernate.dialect.MySQL8Dialect&lt;\/property&gt;\n        &lt;property name=\"hibernate.show_sql\"&gt;true&lt;\/property&gt;\n        &lt;property name=\"hibernate.format_sql\"&gt;true&lt;\/property&gt;\n        &lt;property name=\"hibernate.hbm2ddl.auto\"&gt;update&lt;\/property&gt;\n\n        &lt;!-- \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30af\u30e9\u30b9\u306e\u30de\u30c3\u30d4\u30f3\u30b0 --&gt;\n        &lt;mapping class=\"com.example.entity.User\"\/&gt;\n    &lt;\/session-factory&gt;\n&lt;\/hibernate-configuration&gt;<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>SessionFactory\u306e\u521d\u671f\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class HibernateUtil {\n    private static final SessionFactory sessionFactory;\n\n    static {\n        try {\n            \/\/ SessionFactory\u306e\u69cb\u7bc9\n            sessionFactory = new Configuration()\n                .configure(\"hibernate.cfg.xml\")\n                .buildSessionFactory();\n        } catch (Throwable ex) {\n            throw new ExceptionInInitializerError(ex);\n        }\n    }\n\n    public static SessionFactory getSessionFactory() {\n        return sessionFactory;\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u4f5c\u6210\u3068\u30de\u30c3\u30d4\u30f3\u30b0\u8a2d\u5b9a\u306e\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u7684\u306a\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30af\u30e9\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Entity\n@Table(name = \"users\")\npublic class User {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n\n    @Column(name = \"first_name\", nullable = false, length = 50)\n    private String firstName;\n\n    @Column(name = \"last_name\", nullable = false, length = 50)\n    private String lastName;\n\n    @Email\n    @Column(unique = true)\n    private String email;\n\n    @Temporal(TemporalType.TIMESTAMP)\n    @Column(name = \"created_at\")\n    private Date createdAt;\n\n    \/\/ getters and setters\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u306e\u30de\u30c3\u30d4\u30f3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Entity\n@Table(name = \"orders\")\npublic class Order {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n\n    @ManyToOne(fetch = FetchType.LAZY)\n    @JoinColumn(name = \"user_id\")\n    private User user;\n\n    @OneToMany(mappedBy = \"order\", cascade = CascadeType.ALL)\n    private List&lt;OrderItem&gt; items = new ArrayList&lt;&gt;();\n\n    \/\/ getters and setters\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">CRUD\u64cd\u4f5c\u306e\u5b9f\u88c5\u65b9\u6cd5\u3068\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Create\uff08\u4f5c\u6210\uff09\u64cd\u4f5c<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30e6\u30fc\u30b6\u30fc\u306e\u4fdd\u5b58\nSession session = HibernateUtil.getSessionFactory().openSession();\nTransaction tx = null;\n\ntry {\n    tx = session.beginTransaction();\n\n    User user = new User();\n    user.setFirstName(\"John\");\n    user.setLastName(\"Doe\");\n    user.setEmail(\"john.doe@example.com\");\n    user.setCreatedAt(new Date());\n\n    session.save(user);\n    tx.commit();\n} catch (Exception e) {\n    if (tx != null) tx.rollback();\n    throw e;\n} finally {\n    session.close();\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Read\uff08\u8aad\u307f\u53d6\u308a\uff09\u64cd\u4f5c<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5358\u4e00\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u53d6\u5f97\nUser user = session.get(User.class, 1L);\n\n\/\/ \u30af\u30a8\u30ea\u306b\u3088\u308b\u691c\u7d22\nString hql = \"FROM User u WHERE u.email LIKE :email\";\nList&lt;User&gt; users = session.createQuery(hql, User.class)\n    .setParameter(\"email\", \"%@example.com\")\n    .getResultList();\n\n\/\/ Criteria API\u306b\u3088\u308b\u691c\u7d22\nCriteriaBuilder cb = session.getCriteriaBuilder();\nCriteriaQuery&lt;User&gt; cr = cb.createQuery(User.class);\nRoot&lt;User&gt; root = cr.from(User.class);\ncr.select(root).where(cb.like(root.get(\"email\"), \"%@example.com\"));\nList&lt;User&gt; users = session.createQuery(cr).getResultList();<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Update\uff08\u66f4\u65b0\uff09\u64cd\u4f5c<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Transaction tx = session.beginTransaction();\ntry {\n    User user = session.get(User.class, 1L);\n    user.setEmail(\"new.email@example.com\");\n    session.update(user);\n    \/\/ \u307e\u305f\u306f session.saveOrUpdate(user);\n    tx.commit();\n} catch (Exception e) {\n    tx.rollback();\n    throw e;\n}<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>Delete\uff08\u524a\u9664\uff09\u64cd\u4f5c<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Transaction tx = session.beginTransaction();\ntry {\n    User user = session.get(User.class, 1L);\n    session.delete(user);\n    tx.commit();\n} catch (Exception e) {\n    tx.rollback();\n    throw e;\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u5b9f\u88c5\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306a\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5883\u754c\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>try-catch-finally \u30d1\u30bf\u30fc\u30f3\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>Spring Transactional\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u6d3b\u7528<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u9069\u5207\u306a\u30af\u30ed\u30fc\u30ba<\/li>\n\n\n\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u518d\u5229\u7528\u3092\u907f\u3051\u308b<\/li>\n\n\n\n<li>ThreadLocal\u306a\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">int batchSize = 50;\nTransaction tx = session.beginTransaction();\ntry {\n    for (int i = 0; i &lt; items.size(); i++) {\n        session.save(items.get(i));\n        if (i % batchSize == 0) {\n            session.flush();\n            session.clear();\n        }\n    }\n    tx.commit();\n} catch (Exception e) {\n    tx.rollback();\n    throw e;\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u57fa\u672c\u7684\u306a\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3\u3092\u7406\u89e3\u3057\u3001\u9069\u5207\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001Hibernate\u3092\u52b9\u679c\u7684\u306b\u4f7f\u7528\u3057\u305f\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\u5c64\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-12\">\u73fe\u5834\u3067\u4f7f\u3048\u308b\uff01Hibernate\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b913\u9078<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u9069\u5316\u3059\u308b5\u3064\u306e\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9069\u5207\u306a\u30d5\u30a7\u30c3\u30c1\u6226\u7565\u306e\u9078\u629e<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Entity\npublic class User {\n    @Id\n    private Long id;\n\n    \/\/ \u983b\u7e41\u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u308b\u30c7\u30fc\u30bf\u306f EAGER\n    @OneToOne(fetch = FetchType.EAGER)\n    private UserProfile profile;\n\n    \/\/ \u5fc5\u8981\u6642\u306e\u307f\u30ed\u30fc\u30c9\u3059\u308b\u30c7\u30fc\u30bf\u306f LAZY\n    @OneToMany(fetch = FetchType.LAZY)\n    @BatchSize(size = 25)  \/\/ \u30d0\u30c3\u30c1\u30b5\u30a4\u30ba\u306e\u6307\u5b9a\n    private List&lt;Order&gt; orders;\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d0\u30c3\u30c1\u30a4\u30f3\u30b5\u30fc\u30c8\u306e\u8a2d\u5b9a\nproperties.put(\"hibernate.jdbc.batch_size\", \"50\");\nproperties.put(\"hibernate.order_inserts\", \"true\");\nproperties.put(\"hibernate.order_updates\", \"true\");\nproperties.put(\"hibernate.batch_versioned_data\", \"true\");\n\n\/\/ \u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u88c5\nSession session = sessionFactory.openSession();\nTransaction tx = session.beginTransaction();\n\ntry {\n    for (int i = 0; i &lt; entities.size(); i++) {\n        session.persist(entities.get(i));\n        if (i % 50 == 0) {  \/\/ 50\u4ef6\u3054\u3068\u306b\u30d5\u30e9\u30c3\u30b7\u30e5\n            session.flush();\n            session.clear();\n        }\n    }\n    tx.commit();\n} catch (Exception e) {\n    tx.rollback();\n    throw e;\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u9069\u5207\u306a\u5229\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30ec\u30d9\u30eb\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u8a2d\u5b9a\n@Entity\n@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)\npublic class Product {\n    \/\/ ...\n}\n\n\/\/ \u30af\u30a8\u30ea\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528\nQuery query = session.createQuery(\"from Product p where p.price &gt; :price\");\nquery.setParameter(\"price\", 100.0);\nquery.setCacheable(true);  \/\/ \u30af\u30a8\u30ea\u7d50\u679c\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\nquery.setCacheRegion(\"product_queries\");<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>N+1\u554f\u984c\u306e\u56de\u907f<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u554f\u984c\u306e\u3042\u308b\u30b3\u30fc\u30c9\n@Entity\npublic class Department {\n    @OneToMany\n    private List&lt;Employee&gt; employees;  \/\/ N+1\u554f\u984c\u306e\u539f\u56e0\n}\n\n\/\/ \u89e3\u6c7a\u7b561: JPQL\u7d50\u5408\u30d5\u30a7\u30c3\u30c1\nString jpql = \"SELECT d FROM Department d LEFT JOIN FETCH d.employees\";\nList&lt;Department&gt; departments = session.createQuery(jpql).getResultList();\n\n\/\/ \u89e3\u6c7a\u7b562: Criteria API\u7d50\u5408\u30d5\u30a7\u30c3\u30c1\nCriteriaBuilder cb = session.getCriteriaBuilder();\nCriteriaQuery&lt;Department&gt; query = cb.createQuery(Department.class);\nRoot&lt;Department&gt; root = query.from(Department.class);\nroot.fetch(\"employees\", JoinType.LEFT);\nquery.select(root);<\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li><strong>\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u52b9\u7387\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u52b9\u7387\u7684\u306a\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u5b9f\u88c5\nQuery query = session.createQuery(\"FROM LargeEntity e\");\nquery.setFirstResult((pageNumber - 1) * pageSize);\nquery.setMaxResults(pageSize);\nquery.setFetchSize(pageSize);\nList&lt;LargeEntity&gt; page = query.getResultList();<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u4fdd\u5b88\u6027\u3092\u9ad8\u3081\u308b4\u3064\u306e\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u898f\u7d04<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u8a2d\u8a08\u539f\u5247<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Entity\n@Table(name = \"products\")\npublic class Product implements Serializable {\n    \/\/ \u660e\u793a\u7684\u306a\u30ab\u30e9\u30e0\u5b9a\u7fa9\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n\n    @Column(name = \"product_name\", nullable = false, length = 100)\n    private String name;\n\n    @Version  \/\/ \u697d\u89b3\u7684\u30ed\u30c3\u30af\u7528\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\n    private Integer version;\n\n    \/\/ \u76e3\u67fb\u60c5\u5831\u306e\u81ea\u52d5\u7ba1\u7406\n    @CreatedDate\n    @Column(name = \"created_at\", updatable = false)\n    private LocalDateTime createdAt;\n\n    @LastModifiedDate\n    @Column(name = \"updated_at\")\n    private LocalDateTime updatedAt;\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>DAO\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Repository\npublic class ProductDao {\n    private final SessionFactory sessionFactory;\n\n    @Autowired\n    public ProductDao(SessionFactory sessionFactory) {\n        this.sessionFactory = sessionFactory;\n    }\n\n    @Transactional(readOnly = true)\n    public Optional&lt;Product&gt; findById(Long id) {\n        return Optional.ofNullable(getCurrentSession().get(Product.class, id));\n    }\n\n    protected Session getCurrentSession() {\n        return sessionFactory.getCurrentSession();\n    }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u4f8b\u5916\u51e6\u7406\u306e\u7d71\u4e00<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class HibernateRepository&lt;T, ID&gt; {\n    protected T executeCritical(HibernateOperation&lt;T&gt; operation) {\n        try {\n            return operation.execute();\n        } catch (HibernateException e) {\n            throw new DataAccessException(\"Database operation failed\", e);\n        } catch (Exception e) {\n            throw new SystemException(\"Unexpected error occurred\", e);\n        }\n    }\n}\n\n@FunctionalInterface\ninterface HibernateOperation&lt;T&gt; {\n    T execute() throws Exception;\n}<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30af\u30a8\u30ea\u306e\u5916\u90e8\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@NamedQueries({\n    @NamedQuery(\n        name = \"Product.findByCategory\",\n        query = \"FROM Product p WHERE p.category.id = :categoryId\"\n    ),\n    @NamedQuery(\n        name = \"Product.findActiveProducts\",\n        query = \"FROM Product p WHERE p.status = 'ACTIVE'\"\n    )\n})\n@Entity\npublic class Product {\n    \/\/ \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u5b9a\u7fa9\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u5f37\u5316\u3059\u308b4\u3064\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u60aa\u3044\u4f8b\nString hql = \"FROM User u WHERE u.username = '\" + username + \"'\";  \/\/ \u5371\u967a\uff01\n\n\/\/ \u826f\u3044\u4f8b\nString hql = \"FROM User u WHERE u.username = :username\";\nQuery query = session.createQuery(hql);\nquery.setParameter(\"username\", username);  \/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u6a5f\u5bc6\u30c7\u30fc\u30bf\u306e\u4fdd\u8b77<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Entity\npublic class User {\n    @Column\n    @ColumnTransformer(\n        read = \"AES_DECRYPT(credit_card, 'key')\",\n        write = \"AES_ENCRYPT(?, 'key')\"\n    )\n    private String creditCard;  \/\/ \u6697\u53f7\u5316\u3055\u308c\u305f\u30c7\u30fc\u30bf\n\n    @Convert(converter = PasswordConverter.class)\n    private String password;  \/\/ \u30ab\u30b9\u30bf\u30e0\u5909\u63db\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u76e3\u67fb\u30ed\u30b0\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Entity\n@EntityListeners(AuditingEntityListener.class)\npublic class AuditedEntity {\n    @CreatedBy\n    private String createdBy;\n\n    @LastModifiedBy\n    private String lastModifiedBy;\n\n    @CreatedDate\n    private LocalDateTime createdAt;\n\n    @LastModifiedDate\n    private LocalDateTime lastModifiedAt;\n}<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Entity\n@DynamicUpdate\n@Where(clause = \"deleted = false\")  \/\/ \u8ad6\u7406\u524a\u9664\u306e\u81ea\u52d5\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\npublic class SecureDocument {\n    @ManyToOne\n    private User owner;\n\n    @Filter(name = \"userFilter\")\n    @FilterDef(name = \"userFilter\", parameters = {\n        @ParamDef(name = \"userId\", type = \"long\")\n    })\n    private Set&lt;User&gt; sharedWith;\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u9ad8\u304f\u3001\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u3001\u305d\u3057\u3066\u5b89\u5168\u306aHibernate\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-16\">Hibernate\u306e\u5fdc\u7528\uff1a\u5b9f\u8df5\u7684\u306a\u958b\u767a\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u30ad\u30e3\u30c3\u30b7\u30e5\u6a5f\u80fd\u3092\u4f7f\u3044\u3053\u306a\u3059\u305f\u3081\u306e\u30ce\u30a6\u30cf\u30a6<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u30ec\u30d9\u30eb\u306e\u9069\u5207\u306a\u9078\u629e<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u7b2c2\u30ec\u30d9\u30eb\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u8a2d\u5b9a\n@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)\n@Entity\npublic class Product {\n    @Id\n    private Long id;\n\n    @Cache(usage = CacheConcurrencyStrategy.READ_ONLY)\n    @ManyToMany\n    private Set&lt;Category&gt; categories;\n}\n\n\/\/ hibernate.cfg.xml\u3067\u306e\u8a2d\u5b9a\n&lt;property name=\"hibernate.cache.use_second_level_cache\"&gt;true&lt;\/property&gt;\n&lt;property name=\"hibernate.cache.region.factory_class\"&gt;\n    org.hibernate.cache.ehcache.EhCacheRegionFactory\n&lt;\/property&gt;<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30af\u30a8\u30ea\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528\n@Repository\npublic class ProductRepository {\n    @Cacheable(\"products\")\n    public List&lt;Product&gt; findPopularProducts() {\n        return sessionFactory.getCurrentSession()\n            .createQuery(\"FROM Product p WHERE p.popular = true\")\n            .setCacheable(true)\n            .setCacheRegion(\"popular_products\")\n            .list();\n    }\n\n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u624b\u52d5\u5236\u5fa1\n    public void updateProduct(Product product) {\n        sessionFactory.getCurrentSession().update(product);\n        sessionFactory.getCache().evictEntity(Product.class, product.getId());\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5ba3\u8a00\u7684\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Service\n@Transactional\npublic class OrderService {\n    @Autowired\n    private OrderRepository orderRepository;\n\n    \/\/ \u8aad\u307f\u53d6\u308a\u5c02\u7528\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\n    @Transactional(readOnly = true)\n    public Order findOrder(Long id) {\n        return orderRepository.findById(id);\n    }\n\n    \/\/ \u72ec\u7acb\u3057\u305f\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\n    @Transactional(propagation = Propagation.REQUIRES_NEW)\n    public void processOrder(Order order) {\n        \/\/ \u51e6\u7406\u30ed\u30b8\u30c3\u30af\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d7\u30ed\u30b0\u30e9\u30de\u30c6\u30a3\u30c3\u30af\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class TransactionTemplate {\n    private final SessionFactory sessionFactory;\n\n    public &lt;T&gt; T executeInTransaction(TransactionCallback&lt;T&gt; callback) {\n        Session session = sessionFactory.getCurrentSession();\n        Transaction tx = session.beginTransaction();\n        try {\n            T result = callback.execute(session);\n            tx.commit();\n            return result;\n        } catch (Exception e) {\n            tx.rollback();\n            throw new RuntimeException(\"Transaction failed\", e);\n        }\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\ntransactionTemplate.executeInTransaction(session -&gt; {\n    Order order = session.get(Order.class, orderId);\n    order.setStatus(OrderStatus.COMPLETED);\n    return session.merge(order);\n});<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u3067\u306eHibernate\u306e\u6d3b\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@TestConfiguration\npublic class TestHibernateConfig {\n    @Bean\n    public LocalSessionFactoryBean sessionFactory() {\n        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();\n        sessionFactory.setDataSource(dataSource());\n        sessionFactory.setPackagesToScan(\"com.example.entity\");\n        sessionFactory.setHibernateProperties(hibernateProperties());\n        return sessionFactory;\n    }\n\n    @Bean\n    public DataSource dataSource() {\n        return new EmbeddedDatabaseBuilder()\n            .setType(EmbeddedDatabaseType.H2)\n            .build();\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u5358\u4f53\u30c6\u30b9\u30c8\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@SpringBootTest\n@Transactional\nclass ProductRepositoryTest {\n    @Autowired\n    private ProductRepository productRepository;\n\n    @Test\n    void whenSaveProduct_thenProductIsPersisted() {\n        \/\/ \u6e96\u5099\n        Product product = new Product();\n        product.setName(\"Test Product\");\n        product.setPrice(BigDecimal.valueOf(100));\n\n        \/\/ \u5b9f\u884c\n        Product savedProduct = productRepository.save(product);\n\n        \/\/ \u691c\u8a3c\n        assertNotNull(savedProduct.getId());\n        assertEquals(\"Test Product\", savedProduct.getName());\n    }\n\n    @Test\n    void whenFindByCategory_thenProductsAreReturned() {\n        \/\/ \u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\n        Category category = new Category(\"Electronics\");\n        Product product1 = new Product(\"Laptop\", category);\n        Product product2 = new Product(\"Phone\", category);\n        productRepository.saveAll(Arrays.asList(product1, product2));\n\n        \/\/ \u30c6\u30b9\u30c8\u306e\u5b9f\u884c\u3068\u691c\u8a3c\n        List&lt;Product&gt; found = productRepository.findByCategory(category);\n        assertEquals(2, found.size());\n    }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c6\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@SpringBootTest\n@TestInstance(TestInstance.Lifecycle.PER_CLASS)\nclass OrderProcessIntegrationTest {\n    @Autowired\n    private OrderService orderService;\n\n    @Autowired\n    private SessionFactory sessionFactory;\n\n    @BeforeAll\n    void setUp() {\n        \/\/ \u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\n    }\n\n    @Test\n    @Transactional\n    void testCompleteOrderProcess() {\n        \/\/ \u6ce8\u6587\u4f5c\u6210\n        Order order = new Order();\n        order.setItems(Arrays.asList(\n            new OrderItem(\"Item 1\", 2),\n            new OrderItem(\"Item 2\", 1)\n        ));\n\n        \/\/ \u6ce8\u6587\u51e6\u7406\n        Order processedOrder = orderService.processOrder(order);\n\n        \/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u30d5\u30e9\u30c3\u30b7\u30e5\u3057\u3066\u65b0\u3057\u3044\u30bb\u30c3\u30b7\u30e7\u30f3\u3067\u691c\u8a3c\n        sessionFactory.getCurrentSession().flush();\n        sessionFactory.getCurrentSession().clear();\n\n        Order foundOrder = orderService.findOrder(processedOrder.getId());\n        assertEquals(OrderStatus.COMPLETED, foundOrder.getStatus());\n        assertEquals(2, foundOrder.getItems().size());\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7d71\u8a08\u60c5\u5831\u306e\u53ce\u96c6\u3068\u5206\u6790<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u7d71\u8a08\u60c5\u5831\u306e\u6709\u52b9\u5316\n&lt;property name=\"hibernate.generate_statistics\"&gt;true&lt;\/property&gt;\n\n\/\/ \u7d71\u8a08\u60c5\u5831\u306e\u5229\u7528\nStatistics stats = sessionFactory.getStatistics();\nlog.info(\"Cache hit ratio: {}\", stats.getSecondLevelCacheHitCount() \/\n    (float) (stats.getSecondLevelCacheHitCount() + stats.getSecondLevelCacheMissCount()));<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u52d5\u7684\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public List&lt;Product&gt; searchProducts(ProductSearchCriteria criteria) {\n    CriteriaBuilder cb = session.getCriteriaBuilder();\n    CriteriaQuery&lt;Product&gt; query = cb.createQuery(Product.class);\n    Root&lt;Product&gt; root = query.from(Product.class);\n\n    List&lt;Predicate&gt; predicates = new ArrayList&lt;&gt;();\n\n    if (criteria.getName() != null) {\n        predicates.add(cb.like(root.get(\"name\"), \"%\" + criteria.getName() + \"%\"));\n    }\n\n    if (criteria.getMinPrice() != null) {\n        predicates.add(cb.greaterThanOrEqualTo(root.get(\"price\"), criteria.getMinPrice()));\n    }\n\n    query.where(predicates.toArray(new Predicate[0]));\n\n    return session.createQuery(query)\n        .setHint(QueryHints.HINT_FETCH_SIZE, 100)\n        .getResultList();\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5fdc\u7528\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u9ad8\u6027\u80fd\u3067\u4fe1\u983c\u6027\u306e\u9ad8\u3044Hibernate\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-21\">\u3088\u304f\u3042\u308b\u30c8\u30e9\u30d6\u30eb\u3068\u89e3\u6c7a\u65b9\u6cd5\uff1a\u73fe\u5834\u306e\u30b1\u30fc\u30b9\u30b9\u30bf\u30c7\u30a3<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">N+1\u554f\u984c\u306e\u5bfe\u51e6\u6cd5\u3068\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u554f\u984c\u306e\u7279\u5b9a\u65b9\u6cd5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u554f\u984c\u306e\u3042\u308b\u30b3\u30fc\u30c9\n@Entity\npublic class Department {\n    @OneToMany\n    private List&lt;Employee&gt; employees;\n}\n\n\/\/ \u30ed\u30b0\u51fa\u529b\u306e\u8a2d\u5b9a\n&lt;property name=\"hibernate.show_sql\"&gt;true&lt;\/property&gt;\n&lt;property name=\"hibernate.format_sql\"&gt;true&lt;\/property&gt;\n\n\/\/ \u5b9f\u884c\u6642\u306e\u30ed\u30b0\u4f8b\nHibernate: select * from department\nHibernate: select * from employee where department_id = 1\nHibernate: select * from employee where department_id = 2\nHibernate: select * from employee where department_id = 3\n\/\/ ... N\u56de\u306e\u30af\u30a8\u30ea\u304c\u767a\u751f<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u89e3\u6c7a\u65b9\u6cd5\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u65b9\u6cd51: JOIN FETCH \u306e\u4f7f\u7528\n@Repository\npublic class DepartmentRepository {\n    public List&lt;Department&gt; findAllWithEmployees() {\n        return entityManager.createQuery(\n            \"SELECT DISTINCT d FROM Department d \" +\n            \"LEFT JOIN FETCH d.employees\", Department.class)\n            .getResultList();\n    }\n}\n\n\/\/ \u65b9\u6cd52: @BatchSize \u306e\u4f7f\u7528\n@Entity\npublic class Department {\n    @OneToMany\n    @BatchSize(size = 25)\n    private List&lt;Employee&gt; employees;\n}\n\n\/\/ \u65b9\u6cd53: EntityGraph\u306e\u4f7f\u7528\n@EntityGraph(attributePaths = {\"employees\"})\n@Query(\"SELECT d FROM Department d\")\nList&lt;Department&gt; findAllWithEmployees();<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">\u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u56de\u907f\u306e\u305f\u3081\u306e\u30a2\u30d7\u30ed\u30fc\u30c1<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u691c\u51fa\u306e\u30ed\u30b0\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># application.properties\nhibernate.connection.provider_disables_autocommit=false\nhibernate.dialect=org.hibernate.dialect.MySQL8Dialect\nlogging.level.org.hibernate.engine.transaction.internal.TransactionImpl=DEBUG<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u9632\u6b62\u30d1\u30bf\u30fc\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Service\npublic class OrderProcessingService {\n    @Transactional\n    public void processOrder(Long orderId, Long productId) {\n        \/\/ \u4e00\u5b9a\u306e\u9806\u5e8f\u3067\u30ed\u30c3\u30af\u3092\u53d6\u5f97\n        Order order = entityManager.find(Order.class, orderId,\n            LockModeType.PESSIMISTIC_WRITE);\n        Product product = entityManager.find(Product.class, productId,\n            LockModeType.PESSIMISTIC_WRITE);\n\n        \/\/ \u51e6\u7406\u306e\u5b9f\u884c\n        processOrderAndProduct(order, product);\n    }\n\n    \/\/ \u30ea\u30c8\u30e9\u30a4\u30ed\u30b8\u30c3\u30af\u306e\u5b9f\u88c5\n    @Retryable(\n        value = { OptimisticLockException.class },\n        maxAttempts = 3,\n        backoff = @Backoff(delay = 1000)\n    )\n    public void processWithRetry(Order order) {\n        \/\/ \u51e6\u7406\u30ed\u30b8\u30c3\u30af\n    }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u697d\u89b3\u7684\u30ed\u30c3\u30af\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Entity\npublic class Inventory {\n    @Version\n    private Integer version;\n\n    private Integer quantity;\n\n    public void decreaseQuantity(int amount) {\n        if (quantity &lt; amount) {\n            throw new InsufficientStockException();\n        }\n        quantity -= amount;\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-24\">\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u9632\u3050\u305f\u3081\u306e\u8a2d\u5b9a\u3068\u904b\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u7528\u306e\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30af\u30e9\u30b9\n@Component\npublic class HibernateSessionManager {\n    private final SessionFactory sessionFactory;\n\n    \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5883\u754c\u3067\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\n    public &lt;T&gt; T executeInTransaction(TransactionCallback&lt;T&gt; callback) {\n        Session session = null;\n        Transaction tx = null;\n        try {\n            session = sessionFactory.openSession();\n            tx = session.beginTransaction();\n            T result = callback.execute(session);\n            tx.commit();\n            return result;\n        } catch (Exception e) {\n            if (tx != null) tx.rollback();\n            throw e;\n        } finally {\n            if (session != null) session.close();\n        }\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u30b5\u30a4\u30ba\u306e\u5236\u5fa1<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- ehcache.xml --&gt;\n&lt;cache name=\"com.example.Entity\"\n    maxElementsInMemory=\"10000\"\n    eternal=\"false\"\n    timeToIdleSeconds=\"300\"\n    timeToLiveSeconds=\"600\"\n    memoryStoreEvictionPolicy=\"LRU\"&gt;\n&lt;\/cache&gt;<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Component\npublic class HibernateMetricsCollector {\n    private final Statistics statistics;\n\n    public void logMemoryStatistics() {\n        log.info(\"Entity fetch count: {}\", statistics.getEntityFetchCount());\n        log.info(\"Second level cache hit count: {}\", \n            statistics.getSecondLevelCacheHitCount());\n        log.info(\"Second level cache miss count: {}\", \n            statistics.getSecondLevelCacheMissCount());\n        log.info(\"Query execution count: {}\", statistics.getQueryExecutionCount());\n    }\n}\n\n\/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8a2d\u5b9a\n&lt;property name=\"hibernate.generate_statistics\"&gt;true&lt;\/property&gt;\n&lt;property name=\"hibernate.session.events.log\"&gt;true&lt;\/property&gt;<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u51e6\u7406\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Service\npublic class LargeDataProcessor {\n    @Transactional\n    public void processLargeDataSet() {\n        ScrollableResults scrollableResults = session\n            .createQuery(\"FROM LargeEntity\")\n            .setFetchSize(50)\n            .scroll(ScrollMode.FORWARD_ONLY);\n\n        int count = 0;\n        while (scrollableResults.next()) {\n            LargeEntity entity = (LargeEntity) scrollableResults.get(0);\n            processEntity(entity);\n\n            if (++count % 50 == 0) {\n                session.flush();\n                session.clear();\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u624b\u6cd5\u3092\u7406\u89e3\u3057\u3001\u9069\u5207\u306b\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001Hibernate\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5b89\u5b9a\u6027\u3068\u4fe1\u983c\u6027\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5404\u554f\u984c\u306b\u5bfe\u3059\u308b\u65e9\u671f\u767a\u898b\u3068\u9069\u5207\u306a\u5bfe\u5fdc\u304c\u3001\u904b\u7528\u4e0a\u306e\u554f\u984c\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u308b\u305f\u3081\u306e\u9375\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-25\">\u307e\u3068\u3081\uff1aHibernate\u5c0e\u5165\u306e\u5b9f\u8df5\u30ed\u30fc\u30c9\u30de\u30c3\u30d7<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-26\">\u672c\u8a18\u4e8b\u3067\u89e3\u8aac\u3057\u305f\u91cd\u8981\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Hibernate\u306e\u57fa\u790e\u3068\u4fa1\u5024<\/strong>\n<ul class=\"wp-block-list\">\n<li>Java\u6700\u5f37\u306eORM\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u3057\u3066\u306e\u4f4d\u7f6e\u3065\u3051<\/li>\n\n\n\n<li>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u3068\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u6a4b\u6e21\u3057<\/li>\n\n\n\n<li>\u958b\u767a\u52b9\u7387\u3068\u4fdd\u5b88\u6027\u306e\u5927\u5e45\u306a\u5411\u4e0a<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u5b9f\u88c5\u306e\u30ad\u30fc\u30dd\u30a4\u30f3\u30c8<\/strong> \u30d5\u30a7\u30fc\u30ba \u91cd\u8981\u306a\u8003\u616e\u70b9 \u8a2d\u8a08\u6642 \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u8a2d\u8a08\u3001\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u306e\u5b9a\u7fa9 \u958b\u767a\u6642 \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56 \u904b\u7528\u6642 \u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u3001\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/li>\n\n\n\n<li><strong>13\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306e\u30dd\u30a4\u30f3\u30c8<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e5\u3064\u306e\u624b\u6cd5<\/li>\n\n\n\n<li>\u4fdd\u5b88\u6027\u3092\u9ad8\u3081\u308b4\u3064\u306e\u898f\u7d04<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5f37\u5316\u306e4\u3064\u306e\u5b9f\u88c5\u65b9\u6cd5<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-27\">\u5b9f\u8df5\u6295\u5165\u3078\u306e\u30b9\u30c6\u30c3\u30d7<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5c0e\u5165\u30d5\u30a7\u30fc\u30ba<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ 1. \u57fa\u672c\u8a2d\u5b9a\u306e\u78ba\u8a8d\n@Configuration\npublic class HibernateConfig {\n    \/\/ \u5fc5\u8981\u6700\u5c0f\u9650\u306e\u8a2d\u5b9a\u304b\u3089\u59cb\u3081\u308b\n    @Bean\n    public LocalSessionFactoryBean sessionFactory() {\n        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();\n        sessionFactory.setDataSource(dataSource());\n        sessionFactory.setPackagesToScan(\"com.example.entity\");\n        return sessionFactory;\n    }\n}\n\n\/\/ 2. \u5358\u7d14\u306a\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u304b\u3089\u30b9\u30bf\u30fc\u30c8\n@Entity\npublic class SimpleEntity {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n    private String name;\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u6700\u9069\u5316\u30d5\u30a7\u30fc\u30ba<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u306e\u6bb5\u968e\u7684\u5c0e\u5165<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>N+1\u554f\u984c\u3078\u306e\u5bfe\u51e6<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u904b\u7528\u30d5\u30a7\u30fc\u30ba<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u76e3\u8996\u4f53\u5236\u306e\u78ba\u7acb<\/li>\n\n\n\n<li>\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u6226\u7565\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u306e\u7d99\u7d9a\u7684\u5b9f\u65bd<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-28\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b9\u30ad\u30eb\u30a2\u30c3\u30d7\u306e\u65b9\u5411\u6027<\/strong>\n<ul class=\"wp-block-list\">\n<li>Spring Data JPA\u306e\u7fd2\u5f97<\/li>\n\n\n\n<li>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3067\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u306a\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3\u306e\u5b66\u7fd2<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u5b9f\u8df5\u30dd\u30a4\u30f3\u30c8<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u6bb5\u968e\u7684\u306a\u5c0e\u5165<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u5168\u4f53\u3067\u306e\u77e5\u8b58\u5171\u6709<\/li>\n\n\n\n<li>\u7d99\u7d9a\u7684\u306a\u6539\u5584\u30d7\u30ed\u30bb\u30b9\u306e\u78ba\u7acb<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u6ce8\u76ee\u3059\u3079\u304d\u6700\u65b0\u30c8\u30ec\u30f3\u30c9<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9<\/li>\n\n\n\n<li>NoSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u7d71\u5408<\/li>\n\n\n\n<li>\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u306a\u958b\u767a\u624b\u6cd5<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-29\">\u6700\u5f8c\u306b<\/h3>\n\n\n\n<p>Hibernate\u306f\u3001\u9069\u5207\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u958b\u767a\u52b9\u7387\u3068\u4fdd\u5b88\u6027\u3092\u5927\u304d\u304f\u5411\u4e0a\u3055\u305b\u308b\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u3067\u3059\u3002\u672c\u8a18\u4e8b\u3067\u89e3\u8aac\u3057\u305f\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3\u3084\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u53c2\u8003\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5408\u308f\u305b\u3066\u6bb5\u968e\u7684\u306b\u5c0e\u5165\u3092\u9032\u3081\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u7279\u306b\u91cd\u8981\u306a\u306e\u306f\u4ee5\u4e0b\u306e3\u70b9\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6bb5\u968e\u7684\u306a\u5c0e\u5165<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u57fa\u672c\u6a5f\u80fd\u304b\u3089\u59cb\u3081\u308b<\/li>\n\n\n\n<li>\u5f90\u3005\u306b\u6700\u9069\u5316\u3092\u9032\u3081\u308b<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u5168\u4f53\u306e\u30b9\u30ad\u30eb\u30a2\u30c3\u30d7\u3092\u56f3\u308b<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u7d99\u7d9a\u7684\u306a\u6539\u5584<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u76e3\u8996<\/li>\n\n\n\n<li>\u554f\u984c\u7b87\u6240\u306e\u7279\u5b9a\u3068\u5bfe\u7b56<\/li>\n\n\n\n<li>\u65b0\u3057\u3044\u6a5f\u80fd\u3084\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306e\u5c0e\u5165<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30c1\u30fc\u30e0\u5168\u4f53\u3067\u306e\u53d6\u308a\u7d44\u307f<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u77e5\u8b58\u306e\u5171\u6709<\/li>\n\n\n\n<li>\u30ec\u30d3\u30e5\u30fc\u30d7\u30ed\u30bb\u30b9\u306e\u78ba\u7acb<\/li>\n\n\n\n<li>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u6574\u5099<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>Hibernate\u306e\u5c0e\u5165\u306f\u3001\u59cb\u3081\u3084\u3059\u304f\u3001\u6210\u9577\u3055\u305b\u3084\u3059\u3044\u3082\u306e\u3067\u3059\u3002\u672c\u8a18\u4e8b\u3092\u53c2\u8003\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u306a\u5f62\u3067Hibernate\u3092\u6d3b\u7528\u3057\u3066\u3044\u305f\u3060\u3051\u308c\u3070\u5e78\u3044\u3067\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":{"0":"post-476","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-java","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=476"}],"version-history":[{"count":3,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/476\/revisions"}],"predecessor-version":[{"id":483,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/476\/revisions\/483"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=476"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=476"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}