{"id":1165,"date":"2025-03-24T08:52:42","date_gmt":"2025-03-23T23:52:42","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=1165"},"modified":"2025-03-24T08:52:42","modified_gmt":"2025-03-23T23:52:42","slug":"%e3%80%90%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%e3%80%91hibernate%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%81%a8%e5%ae%9f%e8%a3%85%e6%96%b9%e6%b3%95%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=1165","title":{"rendered":"\u3010\u5b8c\u5168\u30ac\u30a4\u30c9\u3011Hibernate\u306e\u4f7f\u3044\u65b9\u3068\u5b9f\u88c5\u65b9\u6cd5\u3092\u5fb9\u5e95\u89e3\u8aac\uff017\u3064\u306e\u91cd\u8981\u30dd\u30a4\u30f3\u30c8\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9Hibernate\u3068\u306f\uff1f\u521d\u5fc3\u8005\u3067\u3082\u308f\u304b\u308b\u57fa\u790e\u77e5\u8b58"},"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\u7279\u5fb4\u3068\u57fa\u672c\u6982\u5ff5\u3092\u89e3\u8aac<\/a>  <\/li>  <li>    <a href=\"#i-1\">ORM\u3068Hibernate\u306e\u95a2\u4fc2\u6027\u3092\u7406\u89e3\u3057\u3088\u3046<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-2\">\u5f93\u6765\u306eJDBC\u3068\u306e\u6bd4\u8f03<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">Hibernate\u306e\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-4\">Hibernate\u3092\u4f7f\u3046\u30e1\u30ea\u30c3\u30c8\u30fb\u30c7\u30e1\u30ea\u30c3\u30c8\u3092\u6bd4\u8f03<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-5\">\u30e1\u30ea\u30c3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-6\">\u30c7\u30e1\u30ea\u30c3\u30c8<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-7\">\u9069\u5207\u306a\u4f7f\u7528\u30b7\u30fc\u30f3<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-8\">Hibernate\u306e\u57fa\u672c\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3068\u5b9f\u88c5\u624b\u9806<\/a>  <\/li>  <li>    <a href=\"#i-9\">Maven\/Gradle\u3067\u306e\u4f9d\u5b58\u95a2\u4fc2\u306e\u8a2d\u5b9a\u65b9\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-10\">Maven\u306e\u5834\u5408<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-11\">Gradle\u306e\u5834\u5408<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-12\">\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u3068\u57fa\u672c\u7684\u306a\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-13\">\u57fa\u672c\u7684\u306a\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30af\u30e9\u30b9\u306e\u4f8b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-14\">\u4e3b\u8981\u306a\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u8aac\u660e<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-15\">\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u66f8\u304d\u65b9\u3068\u91cd\u8981\u306a\u8a2d\u5b9a\u9805\u76ee<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-16\">hibernate.cfg.xml \u306e\u57fa\u672c\u8a2d\u5b9a<\/a>      <\/li>      <li>        <a href=\"#i-17\">\u91cd\u8981\u306a\u8a2d\u5b9a\u9805\u76ee\u306e\u8aac\u660e<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-18\">Java\u8a2d\u5b9a\u30af\u30e9\u30b9\u3067\u306e\u5b9f\u88c5\u4f8b<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-19\">Hibernate\u3067\u306eCRUD\u64cd\u4f5c\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>  <\/li>  <li>    <a href=\"#i-20\">SessionFactory\u3068Session\u306e\u6b63\u3057\u3044\u4f7f\u3044\u65b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-21\">SessionFactory\u306e\u9069\u5207\u306a\u7ba1\u7406<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-22\">Session\u306e\u53d6\u5f97\u3068\u7ba1\u7406<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-23\">\u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\u306e\u5b9f\u88c5\u4f8b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-24\">Create\uff08\u4f5c\u6210\uff09\u64cd\u4f5c<\/a>      <\/li>      <li>        <a href=\"#i-25\">Read\uff08\u8aad\u307f\u53d6\u308a\uff09\u64cd\u4f5c<\/a>      <\/li>      <li>        <a href=\"#i-26\">Update\uff08\u66f4\u65b0\uff09\u64cd\u4f5c<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-27\">Delete\uff08\u524a\u9664\uff09\u64cd\u4f5c<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-28\">\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u91cd\u8981\u6027\u3068\u5b9f\u88c5\u65b9\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-29\">\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u57fa\u672c\u30d1\u30bf\u30fc\u30f3<\/a>      <\/li>      <li>        <a href=\"#i-30\">\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-31\">Hibernate\u306e\u9ad8\u5ea6\u306a\u6a5f\u80fd\u3068\u5b9f\u8df5\u7684\u306a\u4f7f\u3044\u65b9<\/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\u7279\u5fb4\u3068\u57fa\u672c\u6982\u5ff5\u3092\u89e3\u8aac<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-1\">ORM\u3068Hibernate\u306e\u95a2\u4fc2\u6027\u3092\u7406\u89e3\u3057\u3088\u3046<\/h2>\n\n\n\n<p>Hibernate\u306f\u3001Java\u3067\u6700\u3082\u5e83\u304f\u4f7f\u7528\u3055\u308c\u3066\u3044\u308bORM\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002ORM\u3068\u306f\u300cObject-Relational Mapping\uff08\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u95a2\u4fc2\u30de\u30c3\u30d4\u30f3\u30b0\uff09\u300d\u306e\u7565\u3067\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306b\u304a\u3051\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u3001\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30c6\u30fc\u30d6\u30eb\u3092\u81ea\u52d5\u7684\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3059\u308b\u6280\u8853\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u5f93\u6765\u306eJDBC\u3068\u306e\u6bd4\u8f03<\/h3>\n\n\n\n<p>\u5f93\u6765\u306eJDBC\u3092\u4f7f\u7528\u3057\u305f\u5834\u5408\uff1a<\/p>\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=\"\">\/\/ JDBC\u3092\u4f7f\u7528\u3057\u305f\u5f93\u6765\u306e\u65b9\u6cd5\npublic User getUser(int id) {\n    User user = null;\n    String sql = \"SELECT * FROM users WHERE id = ?\";\n    try (Connection conn = getConnection();\n         PreparedStatement ps = conn.prepareStatement(sql)) {\n        ps.setInt(1, id);\n        ResultSet rs = ps.executeQuery();\n        if (rs.next()) {\n            user = new User();\n            user.setId(rs.getInt(\"id\"));\n            user.setName(rs.getString(\"name\"));\n            user.setEmail(rs.getString(\"email\"));\n        }\n    } catch (SQLException e) {\n        e.printStackTrace();\n    }\n    return user;\n}<\/pre>\n\n\n\n<p>Hibernate\u3092\u4f7f\u7528\u3057\u305f\u5834\u5408\uff1a<\/p>\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\u3092\u4f7f\u7528\u3057\u305f\u65b9\u6cd5\npublic User getUser(int id) {\n    Session session = sessionFactory.getCurrentSession();\n    return session.get(User.class, id);\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">Hibernate\u306e\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>SessionFactory<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u30671\u3064\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4fdd\u6301<\/li>\n\n\n\n<li>\u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5\u3067\u91cd\u3044\u51e6\u7406\u3092\u542b\u3080\u305f\u3081\u3001\u30b7\u30f3\u30b0\u30eb\u30c8\u30f3\u3068\u3057\u3066\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Session<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u3084\u308a\u53d6\u308a\u3092\u884c\u3046\u4e3b\u8981\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9<\/li>\n\n\n\n<li>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5358\u4f4d\u3067\u4f5c\u6210\u30fb\u7834\u68c4<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Entity<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30c6\u30fc\u30d6\u30eb\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3055\u308c\u308bJava\u30af\u30e9\u30b9<\/li>\n\n\n\n<li>\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u307e\u305f\u306fXML\u3067\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-4\">Hibernate\u3092\u4f7f\u3046\u30e1\u30ea\u30c3\u30c8\u30fb\u30c7\u30e1\u30ea\u30c3\u30c8\u3092\u6bd4\u8f03<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u30e1\u30ea\u30c3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u751f\u7523\u6027\u306e\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SQL\u306e\u624b\u52d5\u8a18\u8ff0\u304c\u5927\u5e45\u306b\u524a\u6e1b<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306e\u30b3\u30fc\u30c9\u91cf\u304c\u6e1b\u5c11<\/li>\n\n\n\n<li>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u7684\u306a\u8a2d\u8a08\u304c\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4fdd\u5b88\u6027\u306e\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u69cb\u9020\u306e\u5909\u66f4\u306b\u5f37\u3044<\/li>\n\n\n\n<li>\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u304c\u5bb9\u6613<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u304c\u5411\u4e0a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30dd\u30fc\u30bf\u30d3\u30ea\u30c6\u30a3<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u88fd\u54c1\u306b\u4f9d\u5b58\u3057\u306a\u3044\u30b3\u30fc\u30c9\u4f5c\u6210\u304c\u53ef\u80fd<\/li>\n\n\n\n<li>\u65b9\u8a00\uff08Dialect\uff09\u306e\u5207\u308a\u66ff\u3048\u3067\u7570\u306a\u308bDBMS\u306b\u5bfe\u5fdc<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u6a5f\u80fd\u306b\u3088\u308b\u52b9\u7387\u5316<\/li>\n\n\n\n<li>\u5fc5\u8981\u306b\u5fdc\u3058\u305f\u9045\u5ef6\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0<\/li>\n\n\n\n<li>\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u30c7\u30e1\u30ea\u30c3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b66\u7fd2\u30b3\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6982\u5ff5\u3084API\u3001\u8a2d\u5b9a\u306e\u7406\u89e3\u306b\u6642\u9593\u304c\u5fc5\u8981<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u306e\u30ce\u30a6\u30cf\u30a6\u7fd2\u5f97\u304c\u5fc5\u8981<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5358\u7d14\u306aCRUD\u64cd\u4f5c\u3067\u3082\u3042\u308b\u7a0b\u5ea6\u306e\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u304c\u767a\u751f<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u8a2d\u5b9a\u30fb\u4f7f\u7528\u65b9\u6cd5\u3092\u77e5\u3089\u306a\u3044\u3068\u6027\u80fd\u4f4e\u4e0b\u306e\u53ef\u80fd\u6027<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8907\u96d1\u306aSQL\u306e\u6271\u3044<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8907\u96d1\u306a\u96c6\u8a08\u3084JOIN\u306f\u76f4\u63a5SQL\u3092\u66f8\u3044\u305f\u65b9\u304c\u7c21\u5358\u306a\u5834\u5408\u3082<\/li>\n\n\n\n<li>HQL\u3084CriteriaAPI\u306e\u7fd2\u5f97\u304c\u5fc5\u8981<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u9069\u5207\u306a\u4f7f\u7528\u30b7\u30fc\u30f3<\/h3>\n\n\n<div id=\"id-7e7682e7-ebb2-4b1f-bd88-650bc3114384\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30b7\u30fc\u30f3<\/th><th>Hibernate\u306e\u9069\u6027<\/th><th>\u5099\u8003<\/th><\/tr><\/thead><tbody><tr><td>\u4e00\u822c\u7684\u306aCRUD\u64cd\u4f5c\u304c\u4e2d\u5fc3<\/td><td>\u25ce<\/td><td>\u3082\u3063\u3068\u3082\u529b\u3092\u767a\u63ee\u3059\u308b\u5834\u9762<\/td><\/tr><tr><td>\u8907\u96d1\u306a\u96c6\u8a08\u30fb\u5206\u6790\u51e6\u7406<\/td><td>\u25b3<\/td><td>\u30cd\u30a4\u30c6\u30a3\u30d6SQL\u306e\u4f7f\u7528\u3092\u691c\u8a0e<\/td><\/tr><tr><td>\u5927\u91cf\u30c7\u30fc\u30bf\u306e\u30d0\u30c3\u30c1\u51e6\u7406<\/td><td>\u25cb<\/td><td>\u9069\u5207\u306a\u8a2d\u5b9a\u304c\u5fc5\u8981<\/td><\/tr><tr><td>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9<\/td><td>\u25cb<\/td><td>Spring Boot\u3068\u306e\u76f8\u6027\u304c\u826f\u3044<\/td><\/tr><tr><td>\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u7d71\u5408<\/td><td>\u25ce<\/td><td>DBMS\u306e\u9055\u3044\u3092\u5438\u53ce\u3067\u304d\u308b<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\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\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u3001\u305d\u306e\u7279\u6027\u3068\u5236\u9650\u3092\u7406\u89e3\u3057\u305f\u4e0a\u3067\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u969b\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u65b9\u6cd5\u3068\u57fa\u672c\u7684\u306a\u5b9f\u88c5\u624b\u9806\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-8\">Hibernate\u306e\u57fa\u672c\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3068\u5b9f\u88c5\u624b\u9806<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-9\">Maven\/Gradle\u3067\u306e\u4f9d\u5b58\u95a2\u4fc2\u306e\u8a2d\u5b9a\u65b9\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">Maven\u306e\u5834\u5408<\/h3>\n\n\n\n<p><code>pom.xml<\/code>\u306b\u4ee5\u4e0b\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u8ffd\u52a0\u3057\u307e\u3059\uff1a<\/p>\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.orm&lt;\/groupId&gt;\n        &lt;artifactId&gt;hibernate-core&lt;\/artifactId&gt;\n        &lt;version&gt;6.2.7.Final&lt;\/version&gt;\n    &lt;\/dependency&gt;\n\n    &lt;!-- \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c9\u30e9\u30a4\u30d0\u30fc\uff08MySQL\u4f7f\u7528\u306e\u5834\u5408\uff09 --&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;com.mysql&lt;\/groupId&gt;\n        &lt;artifactId&gt;mysql-connector-j&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<h3 class=\"wp-block-heading\" id=\"i-11\">Gradle\u306e\u5834\u5408<\/h3>\n\n\n\n<p><code>build.gradle<\/code>\u306b\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u307e\u3059\uff1a<\/p>\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=\"\">dependencies {\n    \/\/ Hibernate Core\n    implementation 'org.hibernate.orm:hibernate-core:6.2.7.Final'\n\n    \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c9\u30e9\u30a4\u30d0\u30fc\uff08MySQL\u4f7f\u7528\u306e\u5834\u5408\uff09\n    implementation 'com.mysql:mysql-connector-j:8.0.33'\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-12\">\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u3068\u57fa\u672c\u7684\u306a\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u57fa\u672c\u7684\u306a\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30af\u30e9\u30b9\u306e\u4f8b<\/h3>\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=\"\">import jakarta.persistence.*;\nimport java.time.LocalDateTime;\n\n@Entity\n@Table(name = \"users\")\npublic class User {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n\n    @Column(name = \"username\", nullable = false, length = 50)\n    private String username;\n\n    @Column(name = \"email\", unique = true)\n    private String email;\n\n    @Column(name = \"created_at\")\n    private LocalDateTime createdAt;\n\n    \/\/ \u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u306e\u4f8b\n    @OneToMany(mappedBy = \"user\", cascade = CascadeType.ALL)\n    private List&lt;Order&gt; orders = new ArrayList&lt;&gt;();\n\n    \/\/ \u30b2\u30c3\u30bf\u30fc\u30fb\u30bb\u30c3\u30bf\u30fc\uff08\u7701\u7565\uff09\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u4e3b\u8981\u306a\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u8aac\u660e<\/h3>\n\n\n<div id=\"id-6899bed3-c51f-4111-bd74-22308050c3bd\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3<\/th><th>\u7528\u9014<\/th><th>\u4e3b\u306a\u5c5e\u6027<\/th><\/tr><\/thead><tbody><tr><td>@Entity<\/td><td>\u30af\u30e9\u30b9\u3092\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3068\u3057\u3066\u6307\u5b9a<\/td><td>name: \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u540d<\/td><\/tr><tr><td>@Table<\/td><td>\u30de\u30c3\u30d4\u30f3\u30b0\u3059\u308b\u30c6\u30fc\u30d6\u30eb\u3092\u6307\u5b9a<\/td><td>name: \u30c6\u30fc\u30d6\u30eb\u540d<\/td><\/tr><tr><td>@Id<\/td><td>\u4e3b\u30ad\u30fc\u3092\u6307\u5b9a<\/td><td>\u2013<\/td><\/tr><tr><td>@GeneratedValue<\/td><td>\u4e3b\u30ad\u30fc\u306e\u751f\u6210\u6226\u7565\u3092\u6307\u5b9a<\/td><td>strategy: \u751f\u6210\u65b9\u6cd5<\/td><\/tr><tr><td>@Column<\/td><td>\u30ab\u30e9\u30e0\u306e\u8a73\u7d30\u3092\u6307\u5b9a<\/td><td>name, nullable, length \u306a\u3069<\/td><\/tr><tr><td>@OneToMany<\/td><td>1\u5bfe\u591a\u306e\u95a2\u4fc2\u3092\u6307\u5b9a<\/td><td>mappedBy, cascade \u306a\u3069<\/td><\/tr><tr><td>@ManyToOne<\/td><td>\u591a\u5bfe1\u306e\u95a2\u4fc2\u3092\u6307\u5b9a<\/td><td>optional, fetch \u306a\u3069<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"i-15\">\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u66f8\u304d\u65b9\u3068\u91cd\u8981\u306a\u8a2d\u5b9a\u9805\u76ee<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">hibernate.cfg.xml \u306e\u57fa\u672c\u8a2d\u5b9a<\/h3>\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\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\/mydb?serverTimezone=UTC&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.MySQLDialect&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;!-- \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30eb\u8a2d\u5b9a --&gt;\n        &lt;property name=\"hibernate.c3p0.min_size\"&gt;5&lt;\/property&gt;\n        &lt;property name=\"hibernate.c3p0.max_size\"&gt;20&lt;\/property&gt;\n        &lt;property name=\"hibernate.c3p0.timeout\"&gt;300&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;mapping class=\"com.example.entity.Order\"\/&gt;\n    &lt;\/session-factory&gt;\n&lt;\/hibernate-configuration&gt;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u91cd\u8981\u306a\u8a2d\u5b9a\u9805\u76ee\u306e\u8aac\u660e<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>hibernate.connection.driver_class<\/code>: JDBC\u30c9\u30e9\u30a4\u30d0\u30fc\u306e\u30af\u30e9\u30b9<\/li>\n\n\n\n<li><code>hibernate.connection.url<\/code>: \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306eURL<\/li>\n\n\n\n<li><code>hibernate.connection.username<\/code>: \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30e6\u30fc\u30b6\u30fc\u540d<\/li>\n\n\n\n<li><code>hibernate.connection.password<\/code>: \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d1\u30b9\u30ef\u30fc\u30c9<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Hibernate\u57fa\u672c\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>hibernate.dialect<\/code>: \u4f7f\u7528\u3059\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u65b9\u8a00<\/li>\n\n\n\n<li><code>hibernate.show_sql<\/code>: SQL\u3092\u30ed\u30b0\u306b\u51fa\u529b\u3059\u308b\u304b\u3069\u3046\u304b<\/li>\n\n\n\n<li><code>hibernate.format_sql<\/code>: SQL\u3092\u6574\u5f62\u3057\u3066\u51fa\u529b\u3059\u308b\u304b\u3069\u3046\u304b<\/li>\n\n\n\n<li><code>hibernate.hbm2ddl.auto<\/code>: \u30b9\u30ad\u30fc\u30de\u306e\u81ea\u52d5\u751f\u6210\u30aa\u30d7\u30b7\u30e7\u30f3\n<ul class=\"wp-block-list\">\n<li><code>validate<\/code>: \u691c\u8a3c\u306e\u307f<\/li>\n\n\n\n<li><code>update<\/code>: \u5fc5\u8981\u306b\u5fdc\u3058\u3066\u66f4\u65b0<\/li>\n\n\n\n<li><code>create<\/code>: \u6bce\u56de\u4f5c\u6210<\/li>\n\n\n\n<li><code>create-drop<\/code>: \u7d42\u4e86\u6642\u306b\u524a\u9664<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>hibernate.c3p0.min_size<\/code>: \u6700\u5c0f\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u6570<\/li>\n\n\n\n<li><code>hibernate.c3p0.max_size<\/code>: \u6700\u5927\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u6570<\/li>\n\n\n\n<li><code>hibernate.c3p0.timeout<\/code>: \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u6642\u9593\uff08\u79d2\uff09<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">Java\u8a2d\u5b9a\u30af\u30e9\u30b9\u3067\u306e\u5b9f\u88c5\u4f8b<\/h3>\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=\"\">import org.hibernate.cfg.Configuration;\nimport org.hibernate.SessionFactory;\n\npublic class HibernateUtil {\n    private static final SessionFactory sessionFactory = buildSessionFactory();\n\n    private static SessionFactory buildSessionFactory() {\n        try {\n            return new Configuration()\n                .configure() \/\/ hibernate.cfg.xml\u3092\u8aad\u307f\u8fbc\u307f\n                .addAnnotatedClass(User.class)\n                .addAnnotatedClass(Order.class)\n                .buildSessionFactory();\n        } catch (Throwable ex) {\n            System.err.println(\"\u521d\u671fSessionFactory\u4f5c\u6210\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\" + ex);\n            throw new ExceptionInInitializerError(ex);\n        }\n    }\n\n    public static SessionFactory getSessionFactory() {\n        return sessionFactory;\n    }\n}<\/pre>\n\n\n\n<p>\u4ee5\u4e0a\u306e\u8a2d\u5b9a\u304c\u5b8c\u4e86\u3057\u305f\u3089\u3001Hibernate\u3092\u4f7f\u7528\u3059\u308b\u6e96\u5099\u304c\u6574\u3044\u307e\u3057\u305f\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u3066\u5b9f\u969b\u306eCRUD\u64cd\u4f5c\u3092\u5b9f\u88c5\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-19\">Hibernate\u3067\u306eCRUD\u64cd\u4f5c\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-20\">SessionFactory\u3068Session\u306e\u6b63\u3057\u3044\u4f7f\u3044\u65b9<\/h2>\n\n\n\n<p>SessionFactory\u3068Session\u306f\u3001Hibernate\u3092\u4f7f\u7528\u3059\u308b\u4e0a\u3067\u6700\u3082\u91cd\u8981\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u3059\u3002\u3053\u308c\u3089\u3092\u9069\u5207\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u304b\u3064\u5b89\u5168\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">SessionFactory\u306e\u9069\u5207\u306a\u7ba1\u7406<\/h3>\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\n    \/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u7d42\u4e86\u6642\u306b\u547c\u3073\u51fa\u3057\n    public static void shutdown() {\n        getSessionFactory().close();\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">Session\u306e\u53d6\u5f97\u3068\u7ba1\u7406<\/h3>\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\u306e\u53d6\u5f97\ntry (Session session = HibernateUtil.getSessionFactory().openSession()) {\n    \/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\n    \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u306e\u958b\u59cb\u3068\u7d42\u4e86\u306f\u5225\u9014\u5fc5\u8981\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-23\">\u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\u306e\u5b9f\u88c5\u4f8b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-24\">Create\uff08\u4f5c\u6210\uff09\u64cd\u4f5c<\/h3>\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 UserDao {\n    public Long createUser(User user) {\n        try (Session session = HibernateUtil.getSessionFactory().openSession()) {\n            Transaction tx = session.beginTransaction();\n            try {\n                Long userId = (Long) session.save(user);\n                tx.commit();\n                return userId;\n            } catch (Exception e) {\n                tx.rollback();\n                throw new RuntimeException(\"\u30e6\u30fc\u30b6\u30fc\u4f5c\u6210\u306b\u5931\u6557\u3057\u307e\u3057\u305f\", e);\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-25\">Read\uff08\u8aad\u307f\u53d6\u308a\uff09\u64cd\u4f5c<\/h3>\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 UserDao {\n    \/\/ \u5358\u4e00\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u53d6\u5f97\n    public User getUserById(Long id) {\n        try (Session session = HibernateUtil.getSessionFactory().openSession()) {\n            return session.get(User.class, id);\n        }\n    }\n\n    \/\/ \u6761\u4ef6\u306b\u57fa\u3065\u304f\u691c\u7d22\n    public List&lt;User&gt; getUsersByUsername(String username) {\n        try (Session session = HibernateUtil.getSessionFactory().openSession()) {\n            CriteriaBuilder cb = session.getCriteriaBuilder();\n            CriteriaQuery&lt;User&gt; cr = cb.createQuery(User.class);\n            Root&lt;User&gt; root = cr.from(User.class);\n            cr.select(root).where(cb.equal(root.get(\"username\"), username));\n\n            return session.createQuery(cr).getResultList();\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-26\">Update\uff08\u66f4\u65b0\uff09\u64cd\u4f5c<\/h3>\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 UserDao {\n    public void updateUser(User user) {\n        try (Session session = HibernateUtil.getSessionFactory().openSession()) {\n            Transaction tx = session.beginTransaction();\n            try {\n                session.update(user);\n                \/\/ \u307e\u305f\u306f merge() \u3092\u4f7f\u7528\n                \/\/ session.merge(user);\n                tx.commit();\n            } catch (Exception e) {\n                tx.rollback();\n                throw new RuntimeException(\"\u30e6\u30fc\u30b6\u30fc\u66f4\u65b0\u306b\u5931\u6557\u3057\u307e\u3057\u305f\", e);\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-27\">Delete\uff08\u524a\u9664\uff09\u64cd\u4f5c<\/h3>\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 UserDao {\n    public void deleteUser(User user) {\n        try (Session session = HibernateUtil.getSessionFactory().openSession()) {\n            Transaction tx = session.beginTransaction();\n            try {\n                session.delete(user);\n                tx.commit();\n            } catch (Exception e) {\n                tx.rollback();\n                throw new RuntimeException(\"\u30e6\u30fc\u30b6\u30fc\u524a\u9664\u306b\u5931\u6557\u3057\u307e\u3057\u305f\", e);\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-28\">\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u91cd\u8981\u6027\u3068\u5b9f\u88c5\u65b9\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-29\">\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u57fa\u672c\u30d1\u30bf\u30fc\u30f3<\/h3>\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 TransactionManager {\n    public static &lt;T&gt; T executeInTransaction(Function&lt;Session, T&gt; action) {\n        try (Session session = HibernateUtil.getSessionFactory().openSession()) {\n            Transaction tx = session.beginTransaction();\n            try {\n                T result = action.apply(session);\n                tx.commit();\n                return result;\n            } catch (Exception e) {\n                tx.rollback();\n                throw new RuntimeException(\"\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5b9f\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\", e);\n            }\n        }\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\npublic class UserService {\n    public User createUserWithOrders(User user, List&lt;Order&gt; orders) {\n        return TransactionManager.executeInTransaction(session -&gt; {\n            session.save(user);\n            orders.forEach(order -&gt; {\n                order.setUser(user);\n                session.save(order);\n            });\n            return user;\n        });\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-30\">\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\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\u306e\u5883\u754c\u3092\u660e\u78ba\u306b<\/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=\"\">   \/\/ \u63a8\u5968\u30d1\u30bf\u30fc\u30f3\n   public void process() {\n       Transaction tx = null;\n       try (Session session = getSession()) {\n           tx = session.beginTransaction();\n           \/\/ \u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\n           tx.commit();\n       } catch (Exception e) {\n           if (tx != null) tx.rollback();\n           throw e;\n       }\n   }<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u9069\u5207\u306a\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5206\u96e2\u30ec\u30d9\u30eb\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=\"\">   \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5206\u96e2\u30ec\u30d9\u30eb\u306e\u8a2d\u5b9a\n   session.beginTransaction(\n       TransactionDefinition.ISOLATION_READ_COMMITTED\n   );<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30d0\u30c3\u30c1\u51e6\u7406\u3067\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 void batchInsert(List&lt;User&gt; users) {\n       try (Session session = getSession()) {\n           Transaction tx = session.beginTransaction();\n           try {\n               for (int i = 0; i &lt; users.size(); i++) {\n                   session.save(users.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           }\n       }\n   }<\/pre>\n\n\n\n<p>\u4ee5\u4e0a\u306e\u5b9f\u88c5\u4f8b\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u53c2\u8003\u306b\u3001\u5b89\u5168\u3067\u52b9\u7387\u7684\u306aHibernate\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u9ad8\u5ea6\u306a\u6a5f\u80fd\u3068\u5b9f\u8df5\u7684\u306a\u4f7f\u3044\u65b9\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-31\">Hibernate\u306e\u9ad8\u5ea6\u306a\u6a5f\u80fd\u3068\u5b9f\u8df5\u7684\u306a\u4f7f\u3044\u65b9<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-32\">Lazy\u30ed\u30fc\u30c9\u3068Eager\u30ed\u30fc\u30c9\u306e\u4f7f\u3044\u5206\u3051<\/h4>\n\n\n\n<p>Hibernate\u306b\u304a\u3051\u308b\u30c7\u30fc\u30bf\u30ed\u30fc\u30c9\u6226\u7565\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u5927\u304d\u306a\u5f71\u97ff\u3092\u4e0e\u3048\u307e\u3059\u3002<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-33\">Lazy Loading\uff08\u9045\u5ef6\u30ed\u30fc\u30c9\uff09<\/h5>\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    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u3067Lazy\n    @OneToMany(mappedBy = \"user\", fetch = FetchType.LAZY)\n    private List&lt;Order&gt; orders;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nUser user = session.get(User.class, 1L);\n\/\/ \u3053\u306e\u6642\u70b9\u3067\u306forders\u306f\u30ed\u30fc\u30c9\u3055\u308c\u3066\u3044\u306a\u3044\n\n\/\/ orders\u306b\u30a2\u30af\u30bb\u30b9\u3057\u305f\u6642\u70b9\u3067SQL\u304c\u5b9f\u884c\u3055\u308c\u308b\nint orderCount = user.getOrders().size();<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-34\">Eager Loading\uff08\u5373\u6642\u30ed\u30fc\u30c9\uff09<\/h5>\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 Order {\n    @Id\n    private Long id;\n\n    \/\/ \u5e38\u306b\u5373\u6642\u30ed\u30fc\u30c9\n    @ManyToOne(fetch = FetchType.EAGER)\n    private User user;\n}\n\n\/\/ JOIN\u30d5\u30a7\u30c3\u30c1\u3092\u4f7f\u7528\u3057\u305f\u660e\u793a\u7684\u306a\u5373\u6642\u30ed\u30fc\u30c9\nString hql = \"SELECT u FROM User u LEFT JOIN FETCH u.orders WHERE u.id = :id\";\nUser user = session.createQuery(hql, User.class)\n    .setParameter(\"id\", 1L)\n    .getSingleResult();<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-35\">\u30ad\u30e3\u30c3\u30b7\u30e5\u6a5f\u80fd\u306e\u52b9\u679c\u7684\u306a\u6d3b\u7528\u65b9\u6cd5<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-36\">\u30d5\u30a1\u30fc\u30b9\u30c8\u30ec\u30d9\u30eb\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u4f7f\u7528<\/h5>\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=\"\">\/\/ \u540c\u4e00\u30bb\u30c3\u30b7\u30e7\u30f3\u5185\u3067\u306e\u518d\u5229\u7528\nSession session = sessionFactory.openSession();\nUser user1 = session.get(User.class, 1L); \/\/ DB\u30a2\u30af\u30bb\u30b9\nUser user2 = session.get(User.class, 1L); \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u53d6\u5f97<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-37\">\u30bb\u30ab\u30f3\u30c9\u30ec\u30d9\u30eb\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u8a2d\u5b9a<\/h5>\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@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)\npublic class User {\n    \/\/ \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u5185\u5bb9\n}\n\n\/\/ hibernate.cfg.xml\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<h5 class=\"wp-block-heading\" id=\"i-38\">\u30af\u30a8\u30ea\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/h5>\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\u7d50\u679c\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\nList&lt;User&gt; users = session.createQuery(\"FROM User\", User.class)\n    .setCacheable(true)\n    .setCacheRegion(\"userQueries\")\n    .getResultList();<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-39\">N+1\u554f\u984c\u306e\u89e3\u6c7a\u65b9\u6cd5\u3068\u5bfe\u7b56<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-40\">N+1\u554f\u984c\u306e\u4f8b<\/h5>\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=\"\">\/\/ N+1\u554f\u984c\u304c\u767a\u751f\u3059\u308b\u30b3\u30fc\u30c9\nList&lt;User&gt; users = session.createQuery(\"FROM User\", User.class).getResultList();\nfor (User user : users) {\n    \/\/ \u5404\u30e6\u30fc\u30b6\u30fc\u306b\u5bfe\u3057\u3066\u500b\u5225\u306eSQL\u304c\u767a\u884c\u3055\u308c\u308b\n    System.out.println(user.getOrders().size());\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-41\">\u89e3\u6c7a\u65b9\u6cd51: JOIN\u30d5\u30a7\u30c3\u30c1\u306e\u4f7f\u7528<\/h5>\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\u56de\u306e\u30af\u30a8\u30ea\u3067\u5fc5\u8981\u306a\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\nString hql = \"SELECT DISTINCT u FROM User u LEFT JOIN FETCH u.orders\";\nList&lt;User&gt; users = session.createQuery(hql, User.class).getResultList();<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-42\">\u89e3\u6c7a\u65b9\u6cd52: \u30d0\u30c3\u30c1\u30d5\u30a7\u30c3\u30c1\u306e\u8a2d\u5b9a<\/h5>\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    @OneToMany(mappedBy = \"user\")\n    @BatchSize(size = 25)  \/\/ 25\u4ef6\u305a\u3064\u30d0\u30c3\u30c1\u53d6\u5f97\n    private List&lt;Order&gt; orders;\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-43\">\u89e3\u6c7a\u65b9\u6cd53: EntityGraph\u306e\u4f7f\u7528<\/h5>\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=\"\">@NamedEntityGraph(\n    name = \"User.orders\",\n    attributeNodes = @NamedAttributeNode(\"orders\")\n)\n@Entity\npublic class User {\n    \/\/ \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u5185\u5bb9\n}\n\n\/\/ EntityGraph\u306e\u4f7f\u7528\nEntityGraph&lt;?&gt; graph = session.getEntityGraph(\"User.orders\");\nList&lt;User&gt; users = session.createQuery(\"FROM User\", User.class)\n    .setHint(\"jakarta.persistence.fetchgraph\", graph)\n    .getResultList();<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-44\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h5>\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<ul class=\"wp-block-list\">\n<li>\u983b\u7e41\u306b\u4f7f\u7528\u3055\u308c\u308b\u95a2\u9023: EAGER<\/li>\n\n\n\n<li>\u5fc5\u8981\u6642\u306e\u307f\u4f7f\u7528: LAZY<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u30ec\u30d9\u30eb\u306e\u4f7f\u3044\u5206\u3051<\/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=\"\">   \/\/ \u3088\u304f\u53c2\u7167\u3055\u308c\u308b\u30de\u30b9\u30bf\u30fc\u30c7\u30fc\u30bf\n   @Cache(usage = CacheConcurrencyStrategy.READ_ONLY)\n\n   \/\/ \u66f4\u65b0\u306e\u53ef\u80fd\u6027\u304c\u3042\u308b\u30c7\u30fc\u30bf\n   @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)\n\n   \/\/ \u975e\u5e38\u306b\u983b\u7e41\u306b\u66f4\u65b0\u3055\u308c\u308b\u30c7\u30fc\u30bf\n   @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)<\/pre>\n\n\n\n<ol start=\"3\" 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=\"\">   @Entity\n   public class User {\n       @OneToMany(mappedBy = \"user\")\n       @Fetch(FetchMode.SUBSELECT)  \/\/ \u30b5\u30d6\u30bb\u30ec\u30af\u30c8\u306b\u3088\u308b\u52b9\u7387\u7684\u306a\u53d6\u5f97\n       private List&lt;Order&gt; orders;\n   }<\/pre>\n\n\n\n<p>\u4ee5\u4e0a\u306e\u9ad8\u5ea6\u306a\u6a5f\u80fd\u3068\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u4fdd\u5b88\u6027\u306e\u9ad8\u3044Hibernate\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3055\u3089\u306b\u8e0f\u307f\u8fbc\u3093\u3060\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-45\">Hibernate\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-46\">\u30af\u30a8\u30ea\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-47\">1. \u30d7\u30ed\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u6700\u9069\u5316<\/h6>\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=\"\">\/\/ \u975e\u52b9\u7387\u306a\u30af\u30a8\u30ea\nList&lt;User&gt; users = session.createQuery(\"FROM User\", User.class).getResultList();\n\n\/\/ \u5fc5\u8981\u306a\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u307f\u53d6\u5f97\u3059\u308b\u6700\u9069\u5316\u30af\u30a8\u30ea\nList&lt;UserDTO&gt; users = session.createQuery(\n    \"SELECT new com.example.UserDTO(u.id, u.name) FROM User u\", \n    UserDTO.class\n).getResultList();<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-48\">2. \u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5<\/h6>\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;User&gt; getPagedUsers(int pageNumber, int pageSize) {\n    return session.createQuery(\"FROM User u ORDER BY u.id\", User.class)\n        .setFirstResult((pageNumber - 1) * pageSize)\n        .setMaxResults(pageSize)\n        .getResultList();\n}\n\n\/\/ \u30ab\u30a6\u30f3\u30c8\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316\npublic Long getUserCount() {\n    return session.createQuery(\"SELECT COUNT(u) FROM User u\", Long.class)\n        .getSingleResult();\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-49\">3. \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u6d3b\u7528<\/h6>\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\", indexes = {\n    @Index(name = \"idx_user_email\", columnList = \"email\"),\n    @Index(name = \"idx_user_name\", columnList = \"first_name, last_name\")\n})\npublic class User {\n    \/\/ \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u5185\u5bb9\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-50\">\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u65b9\u6cd5<\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-51\">1. \u30d0\u30c3\u30c1\u30a4\u30f3\u30b5\u30fc\u30c8\u6700\u9069\u5316<\/h6>\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 UserBatchService {\n    private static final int BATCH_SIZE = 50;\n\n    public void batchInsertUsers(List&lt;User&gt; users) {\n        Session session = sessionFactory.getCurrentSession();\n        for (int i = 0; i &lt; users.size(); i++) {\n            session.persist(users.get(i));\n\n            \/\/ \u30d0\u30c3\u30c1\u30b5\u30a4\u30ba\u3054\u3068\u306b\u30d5\u30e9\u30c3\u30b7\u30e5\u3068\u30af\u30ea\u30a2\n            if (i % BATCH_SIZE == 0) {\n                session.flush();\n                session.clear();\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-52\">2. \u30d0\u30c3\u30c1\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u6700\u9069\u5316<\/h6>\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 UserUpdateService {\n    public void batchUpdateUsers(String status) {\n        Session session = sessionFactory.getCurrentSession();\n\n        \/\/ \u30d0\u30eb\u30af\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u5b9f\u884c\n        String hql = \"UPDATE User u SET u.status = :status \" +\n                    \"WHERE u.lastLoginDate &lt; :date\";\n\n        int updatedCount = session.createQuery(hql)\n            .setParameter(\"status\", status)\n            .setParameter(\"date\", LocalDateTime.now().minusMonths(6))\n            .executeUpdate();\n    }\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-53\">3. \u30b9\u30c8\u30ea\u30fc\u30e0\u51e6\u7406\u306b\u3088\u308b\u5927\u91cf\u30c7\u30fc\u30bf\u51e6\u7406<\/h6>\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 UserProcessingService {\n    public void processLargeUserData() {\n        Session session = sessionFactory.getCurrentSession();\n\n        try (Stream&lt;User&gt; userStream = session.createQuery(\n                \"FROM User u\", User.class)\n                .setFetchSize(1000)\n                .stream()) {\n\n            userStream.forEach(user -&gt; {\n                \/\/ \u30e6\u30fc\u30b6\u30fc\u51e6\u7406\u30ed\u30b8\u30c3\u30af\n                processUser(user);\n\n                \/\/ \u30e1\u30e2\u30ea\u89e3\u653e\n                session.detach(user);\n            });\n        }\n    }\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-54\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u76e3\u8996\u3068\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u306e\u30dd\u30a4\u30f3\u30c8<\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-55\">1. SQL\u30ed\u30b0\u306e\u6700\u9069\u5316\u8a2d\u5b9a<\/h6>\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;!-- hibernate.cfg.xml\u3067\u306e\u8a2d\u5b9a --&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.use_sql_comments\"&gt;true&lt;\/property&gt;\n&lt;property name=\"hibernate.generate_statistics\"&gt;true&lt;\/property&gt;<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-56\">2. \u7d71\u8a08\u60c5\u5831\u306e\u53ce\u96c6\u3068\u5206\u6790<\/h6>\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 HibernateStats {\n    public void printStatistics() {\n        Statistics stats = sessionFactory.getStatistics();\n        log.info(\"Query executions: {}\", stats.getQueryExecutionCount());\n        log.info(\"Longest query time: {}ms\", stats.getQueryExecutionMaxTime());\n        log.info(\"Cache hit ratio: {}%\", stats.getSecondLevelCacheHitCount() * 100 \n            \/ (stats.getSecondLevelCacheHitCount() + stats.getSecondLevelCacheMissCount()));\n    }\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-57\">3. \u30af\u30a8\u30ea\u30d7\u30e9\u30f3\u5206\u6790<\/h6>\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\u30d7\u30e9\u30f3\u53d6\u5f97\u306e\u4f8b\uff08PostgreSQL\uff09\n@Repository\npublic class QueryAnalyzer {\n    public void analyzeQuery(String hql) {\n        String sql = sessionFactory.getCurrentSession()\n            .createQuery(hql)\n            .unwrap(org.hibernate.Query.class)\n            .getQueryString();\n\n        \/\/ EXPLAIN ANALYZE\u306e\u5b9f\u884c\n        Query query = sessionFactory.getCurrentSession()\n            .createNativeQuery(\"EXPLAIN ANALYZE \" + sql);\n        List&lt;String&gt; plan = query.getResultList();\n\n        \/\/ \u30d7\u30e9\u30f3\u5206\u6790\u7d50\u679c\u306e\u30ed\u30b0\u51fa\u529b\n        plan.forEach(log::info);\n    }\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-58\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u9069\u5207\u306a\u30af\u30ea\u30a2<\/li>\n\n\n\n<li>\u4e0d\u8981\u306a\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u30c7\u30bf\u30c3\u30c1<\/li>\n\n\n\n<li>\u30d5\u30a7\u30c3\u30c1\u30b5\u30a4\u30ba\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5fc5\u8981\u306a\u30c7\u30fc\u30bf\u306e\u307f\u306e\u53d6\u5f97<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>N+1\u554f\u984c\u306e\u56de\u907f<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e8c\u6b21\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30af\u30a8\u30ea\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u7d71\u8a08\u306e\u76e3\u8996<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u306e\u624b\u6cd5\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001Hibernate\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5fdc\u7b54\u6027\u3068\u52b9\u7387\u6027\u3092\u5927\u5e45\u306b\u6539\u5584\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Spring Framework\u3068Hibernate\u306e\u9023\u643a\u65b9\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-59\">Spring Framework\u3068Hibernate\u306e\u9023\u643a\u65b9\u6cd5<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-60\">Spring Data JPA\u3068\u306e\u7d71\u5408\u306e\u30dd\u30a4\u30f3\u30c8<\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-61\">\u57fa\u672c\u8a2d\u5b9a<\/h6>\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=\"\">@Configuration\n@EnableJpaRepositories(basePackages = \"com.example.repository\")\n@EntityScan(basePackages = \"com.example.entity\")\npublic class JpaConfig {\n\n    @Bean\n    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {\n        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();\n        em.setDataSource(dataSource());\n        em.setPackagesToScan(\"com.example.entity\");\n\n        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();\n        em.setJpaVendorAdapter(vendorAdapter);\n\n        Properties properties = new Properties();\n        properties.setProperty(\"hibernate.hbm2ddl.auto\", \"update\");\n        properties.setProperty(\"hibernate.dialect\", \"org.hibernate.dialect.MySQLDialect\");\n        em.setJpaProperties(properties);\n\n        return em;\n    }\n\n    @Bean\n    public DataSource dataSource() {\n        HikariConfig config = new HikariConfig();\n        config.setJdbcUrl(\"jdbc:mysql:\/\/localhost:3306\/mydb\");\n        config.setUsername(\"user\");\n        config.setPassword(\"password\");\n        config.setMaximumPoolSize(10);\n\n        return new HikariDataSource(config);\n    }\n\n    @Bean\n    public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {\n        JpaTransactionManager transactionManager = new JpaTransactionManager();\n        transactionManager.setEntityManagerFactory(emf);\n        return transactionManager;\n    }\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-62\">\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u5b9f\u88c5<\/h6>\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 interface UserRepository extends JpaRepository&lt;User, Long&gt; {\n    \/\/ \u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\u306f\u81ea\u52d5\u3067\u63d0\u4f9b\u3055\u308c\u308b\n\n    \/\/ \u30ab\u30b9\u30bf\u30e0\u30af\u30a8\u30ea\u30e1\u30bd\u30c3\u30c9\n    List&lt;User&gt; findByEmailContaining(String email);\n\n    \/\/ @Query\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u305f\u30ab\u30b9\u30bf\u30e0\u30af\u30a8\u30ea\n    @Query(\"SELECT u FROM User u WHERE u.status = :status AND u.lastLoginDate &gt; :date\")\n    List&lt;User&gt; findActiveUsersAfterDate(\n        @Param(\"status\") String status,\n        @Param(\"date\") LocalDateTime date\n    );\n\n    \/\/ \u30cd\u30a4\u30c6\u30a3\u30d6SQL\u30af\u30a8\u30ea\u306e\u4f7f\u7528\n    @Query(value = \"SELECT * FROM users WHERE YEAR(created_at) = :year\", \n           nativeQuery = true)\n    List&lt;User&gt; findUsersCreatedInYear(@Param(\"year\") int year);\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-63\">DI\u30b3\u30f3\u30c6\u30ca\u3092\u4f7f\u3063\u305f\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u65b9\u6cd5<\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-64\">\u30b5\u30fc\u30d3\u30b9\u5c64\u306e\u5b9f\u88c5<\/h6>\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 UserService {\n    private final UserRepository userRepository;\n    private final OrderRepository orderRepository;\n\n    \/\/ \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\n    @Autowired\n    public UserService(UserRepository userRepository, OrderRepository orderRepository) {\n        this.userRepository = userRepository;\n        this.orderRepository = orderRepository;\n    }\n\n    public User createUserWithOrders(User user, List&lt;Order&gt; orders) {\n        User savedUser = userRepository.save(user);\n        orders.forEach(order -&gt; {\n            order.setUser(savedUser);\n            orderRepository.save(order);\n        });\n        return savedUser;\n    }\n\n    \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u8a2d\u5b9a\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\n    @Transactional(readOnly = true)\n    public List&lt;User&gt; findActiveUsers() {\n        return userRepository.findByStatus(\"ACTIVE\");\n    }\n\n    \/\/ \u4f8b\u5916\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\n    @Transactional(rollbackFor = {CustomException.class})\n    public void updateUserStatus(Long userId, String newStatus) throws CustomException {\n        User user = userRepository.findById(userId)\n            .orElseThrow(() -&gt; new CustomException(\"User not found\"));\n        user.setStatus(newStatus);\n        userRepository.save(user);\n    }\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-65\">AOP\u6a5f\u80fd\u306e\u6d3b\u7528<\/h6>\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=\"\">@Aspect\n@Component\npublic class HibernatePerformanceAspect {\n    private static final Logger log = LoggerFactory.getLogger(HibernatePerformanceAspect.class);\n\n    @Around(\"@annotation(org.springframework.transaction.annotation.Transactional)\")\n    public Object measureExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {\n        long startTime = System.currentTimeMillis();\n        try {\n            return joinPoint.proceed();\n        } finally {\n            long executionTime = System.currentTimeMillis() - startTime;\n            log.info(\"Method {} executed in {}ms\", \n                    joinPoint.getSignature().getName(), \n                    executionTime);\n        }\n    }\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-66\">\u9ad8\u5ea6\u306a\u8a2d\u5b9a\u3068\u6700\u9069\u5316<\/h6>\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=\"\">@Configuration\npublic class AdvancedHibernateConfig {\n\n    @Bean\n    public JpaVendorAdapter jpaVendorAdapter() {\n        HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();\n        adapter.setShowSql(true);\n        adapter.setGenerateDdl(true);\n        adapter.setDatabase(Database.MYSQL);\n        return adapter;\n    }\n\n    @Bean\n    public Properties hibernateProperties() {\n        Properties props = new Properties();\n        \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u8a2d\u5b9a\n        props.setProperty(\"hibernate.cache.use_second_level_cache\", \"true\");\n        props.setProperty(\"hibernate.cache.region.factory_class\", \n                         \"org.hibernate.cache.ehcache.EhCacheRegionFactory\");\n\n        \/\/ \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30eb\u8a2d\u5b9a\n        props.setProperty(\"hibernate.hikari.maximumPoolSize\", \"20\");\n        props.setProperty(\"hibernate.hikari.minimumIdle\", \"5\");\n\n        \/\/ \u7d71\u8a08\u60c5\u5831\u53ce\u96c6\n        props.setProperty(\"hibernate.generate_statistics\", \"true\");\n\n        return props;\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001Spring Framework\u3068Hibernate\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u4fdd\u5b88\u6027\u304c\u9ad8\u304f\u3001\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\u5c64\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-67\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-68\">LazyInitializationException\u306e\u5bfe\u51e6\u6cd5<\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-69\">\u30a8\u30e9\u30fc\u306e\u767a\u751f\u30d1\u30bf\u30fc\u30f3<\/h6>\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    @OneToMany(mappedBy = \"user\", fetch = FetchType.LAZY)\n    private List&lt;Order&gt; orders;\n}\n\n\/\/ \u30a8\u30e9\u30fc\u304c\u767a\u751f\u3059\u308b\u30b3\u30fc\u30c9\npublic List&lt;Order&gt; getUserOrders(Long userId) {\n    User user = userRepository.findById(userId).orElseThrow();\n    \/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u9589\u3058\u3089\u308c\u305f\u5f8c\u306b\u30a2\u30af\u30bb\u30b9\n    return user.getOrders();  \/\/ LazyInitializationException\u767a\u751f\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-70\">\u89e3\u6c7a\u65b9\u6cd51: @Transactional\u306e\u9069\u7528<\/h6>\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 UserService {\n    @Transactional(readOnly = true)\n    public List&lt;Order&gt; getUserOrders(Long userId) {\n        User user = userRepository.findById(userId).orElseThrow();\n        \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5185\u3067\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u554f\u984c\u306a\u3057\n        return user.getOrders();\n    }\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-71\">\u89e3\u6c7a\u65b9\u6cd52: JOIN FETCH\u306e\u4f7f\u7528<\/h6>\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 interface UserRepository extends JpaRepository&lt;User, Long&gt; {\n    @Query(\"SELECT u FROM User u LEFT JOIN FETCH u.orders WHERE u.id = :userId\")\n    Optional&lt;User&gt; findByIdWithOrders(@Param(\"userId\") Long userId);\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-72\">\u89e3\u6c7a\u65b9\u6cd53: DTO\u306e\u4f7f\u7528<\/h6>\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 UserDTO {\n    private Long id;\n    private String name;\n    private List&lt;OrderDTO&gt; orders;\n\n    \/\/ \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3001\u30b2\u30c3\u30bf\u30fc\u3001\u30bb\u30c3\u30bf\u30fc\n}\n\n@Service\npublic class UserService {\n    public UserDTO getUserWithOrders(Long userId) {\n        return userRepository.findById(userId)\n            .map(this::convertToDTO)\n            .orElseThrow();\n    }\n\n    private UserDTO convertToDTO(User user) {\n        \/\/ \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u304b\u3089DTO\u3078\u306e\u5909\u63db\u30ed\u30b8\u30c3\u30af\n    }\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-73\">\u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u3092\u9632\u3050\u305f\u3081\u306e\u8a2d\u8a08\u65b9\u6cd5<\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-74\">\u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u691c\u51fa\u3068\u4e88\u9632<\/h6>\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 OrderService {\n    private static final Logger log = LoggerFactory.getLogger(OrderService.class);\n\n    @Transactional(isolation = Isolation.READ_COMMITTED)\n    public void processOrder(Long orderId, Long userId) {\n        \/\/ \u4e00\u8cab\u3057\u305f\u9806\u5e8f\u3067\u30ed\u30c3\u30af\u3092\u53d6\u5f97\n        Order order = orderRepository.findByIdForUpdate(orderId);\n        User user = userRepository.findByIdForUpdate(userId);\n\n        try {\n            \/\/ \u6ce8\u6587\u51e6\u7406\u30ed\u30b8\u30c3\u30af\n            processOrderLogic(order, user);\n        } catch (Exception e) {\n            log.error(\"\u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u767a\u751f: {}\", e.getMessage());\n            throw new ServiceException(\"\u6ce8\u6587\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\", e);\n        }\n    }\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-75\">\u697d\u89b3\u7684\u30ed\u30c3\u30af\u306e\u5b9f\u88c5<\/h6>\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 Order {\n    @Version\n    private Long version;\n\n    \/\/ \u305d\u306e\u4ed6\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\n}\n\n@Service\npublic class OrderService {\n    @Transactional(rollbackFor = OptimisticLockException.class)\n    public void updateOrder(Order order) {\n        try {\n            orderRepository.save(order);\n        } catch (OptimisticLockException e) {\n            \/\/ \u7af6\u5408\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306e\u51e6\u7406\n            handleOptimisticLockException(order, e);\n        }\n    }\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-76\">\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u9632\u6b62\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-77\">\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u6700\u9069\u5316<\/h6>\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 LargeDataService {\n    @Autowired\n    private EntityManager entityManager;\n\n    @Transactional\n    public void processLargeData() {\n        ScrollableResults scrollableResults = entityManager\n            .createQuery(\"FROM LargeEntity\")\n            .setFetchSize(1000)\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 % 100 == 0) {\n                \/\/ \u5b9a\u671f\u7684\u306b\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u30af\u30ea\u30a2\n                entityManager.clear();\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-78\">\u30ad\u30e3\u30c3\u30b7\u30e5\u8a2d\u5b9a\u306e\u6700\u9069\u5316<\/h6>\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=\"\">@Configuration\npublic class CacheConfig {\n    @Bean\n    public CacheManager cacheManager() {\n        return new ConcurrentMapCacheManager() {\n            @Override\n            protected Cache createConcurrentMapCache(String name) {\n                return new ConcurrentMapCache(\n                    name,\n                    CacheBuilder.newBuilder()\n                        .maximumSize(100)  \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30b5\u30a4\u30ba\u306e\u5236\u9650\n                        .expireAfterWrite(10, TimeUnit.MINUTES)  \/\/ TTL\u306e\u8a2d\u5b9a\n                        .build().asMap(),\n                    false);\n            }\n        };\n    }\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-79\">\u30d2\u30fc\u30d7\u30e1\u30e2\u30ea\u76e3\u8996\u3068\u5bfe\u7b56<\/h6>\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 MemoryMonitor {\n    private static final Logger log = LoggerFactory.getLogger(MemoryMonitor.class);\n\n    @Scheduled(fixedRate = 300000)  \/\/ 5\u5206\u3054\u3068\u306b\u5b9f\u884c\n    public void monitorMemoryUsage() {\n        Runtime runtime = Runtime.getRuntime();\n        long totalMemory = runtime.totalMemory();\n        long freeMemory = runtime.freeMemory();\n        long usedMemory = totalMemory - freeMemory;\n\n        log.info(\"\u30e1\u30e2\u30ea\u4f7f\u7528\u72b6\u6cc1: \u4f7f\u7528\u4e2d={}, \u7a7a\u304d={}, \u5408\u8a08={}\",\n                formatSize(usedMemory),\n                formatSize(freeMemory),\n                formatSize(totalMemory));\n\n        \/\/ \u8b66\u544a\u95be\u5024\u306e\u30c1\u30a7\u30c3\u30af\n        if (usedMemory &gt; totalMemory * 0.8) {  \/\/ 80%\u4ee5\u4e0a\u4f7f\u7528\n            log.warn(\"\u30e1\u30e2\u30ea\u4f7f\u7528\u7387\u304c\u9ad8\u304f\u306a\u3063\u3066\u3044\u307e\u3059\");\n        }\n    }\n\n    private String formatSize(long bytes) {\n        return bytes \/ (1024 * 1024) + \"MB\";\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\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\u304d\u304f\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Hibernate6\u306e\u65b0\u6a5f\u80fd\u3068\u5c06\u6765\u306e\u5c55\u671b\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-80\">Hibernate6\u306e\u65b0\u6a5f\u80fd\u3068\u5c06\u6765\u306e\u5c55\u671b<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-81\">\u30d0\u30fc\u30b8\u30e7\u30f35\u304b\u3089\u306e\u4e3b\u8981\u306a\u5909\u66f4\u70b9<\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-82\">1. \u30d1\u30c3\u30b1\u30fc\u30b8\u69cb\u9020\u306e\u5909\u66f4<\/h6>\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 5\nimport org.hibernate.annotations.Cache;\nimport javax.persistence.*;\n\n\/\/ Hibernate 6\nimport org.hibernate.annotations.Cache;\nimport jakarta.persistence.*;  \/\/ Jakarta EE\u3078\u306e\u79fb\u884c<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-83\">2. \u65b0\u3057\u3044\u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7API<\/h6>\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 6\u306e\u65b0\u3057\u3044\u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u65b9\u6cd5\npublic class HibernateConfig {\n    public SessionFactory createSessionFactory() {\n        return new StandardServiceRegistryBuilder()\n            .configure()\n            .build();\n    }\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-84\">3. \u30af\u30a8\u30ea\u30a8\u30f3\u30b8\u30f3\u306e\u6539\u5584<\/h6>\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 ProductRepository {\n    \/\/ \u65b0\u3057\u3044\u30af\u30a8\u30ea\u6700\u9069\u5316\u6a5f\u80fd\u306e\u6d3b\u7528\n    @Query(\"\"\"\n        SELECT p FROM Product p\n        LEFT JOIN FETCH p.category\n        WHERE p.price &gt; :minPrice\n        ORDER BY p.name\n    \"\"\")\n    List&lt;Product&gt; findProductsWithCategory(@Param(\"minPrice\") BigDecimal minPrice);\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-85\">\u65b0\u3057\u3044API\u3068\u6539\u5584\u3055\u308c\u305f\u6a5f\u80fd<\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-86\">1. \u65b0\u3057\u3044\u578b\u30de\u30c3\u30d4\u30f3\u30b0\u6a5f\u80fd<\/h6>\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 Product {\n    \/\/ \u65b0\u3057\u3044UUID\u81ea\u52d5\u751f\u6210\u30b5\u30dd\u30fc\u30c8\n    @Id\n    @GeneratedValue(generator = \"UUID\")\n    @GenericGenerator(name = \"UUID\", strategy = \"org.hibernate.id.UUIDGenerator\")\n    private UUID id;\n\n    \/\/ \u6539\u5584\u3055\u308c\u305fJSON\u578b\u30b5\u30dd\u30fc\u30c8\n    @Type(JsonType.class)\n    @Column(columnDefinition = \"jsonb\")\n    private Map&lt;String, Object&gt; attributes;\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-87\">2. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u6a5f\u80fd<\/h6>\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=\"\">@Configuration\npublic class HibernatePerformanceConfig {\n    @Bean\n    public Properties hibernateProperties() {\n        Properties props = new Properties();\n\n        \/\/ \u65b0\u3057\u3044\u30d0\u30c3\u30c1\u51e6\u7406\u6700\u9069\u5316\n        props.setProperty(\"hibernate.jdbc.batch_size\", \"50\");\n        props.setProperty(\"hibernate.order_inserts\", \"true\");\n        props.setProperty(\"hibernate.order_updates\", \"true\");\n\n        \/\/ \u6539\u5584\u3055\u308c\u305f\u30ad\u30e3\u30c3\u30b7\u30e5\u8a2d\u5b9a\n        props.setProperty(\"hibernate.cache.use_second_level_cache\", \"true\");\n        props.setProperty(\"hibernate.cache.region.factory_class\",\n            \"org.hibernate.cache.jcache.internal.JCacheRegionFactory\");\n\n        return props;\n    }\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-88\">\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3067\u306e\u6d3b\u7528\u65b9\u6cd5<\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-89\">1. \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3067\u306e\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u8a2d\u8a08<\/h6>\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 {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n\n    @Version\n    private Long version;\n\n    \/\/ \u30a4\u30d9\u30f3\u30c8\u30bd\u30fc\u30b7\u30f3\u30b0\u5bfe\u5fdc\n    @Column(name = \"event_version\")\n    private Long eventVersion;\n\n    \/\/ \u76e3\u67fb\u60c5\u5831\n    @CreatedDate\n    private LocalDateTime createdAt;\n\n    @LastModifiedDate\n    private LocalDateTime updatedAt;\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-90\">2. \u5206\u6563\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5bfe\u5fdc<\/h6>\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 DistributedOrderService {\n    @Transactional(propagation = Propagation.REQUIRED)\n    public void processDistributedOrder(Order order) {\n        try {\n            \/\/ \u5728\u5eab\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a\n            inventoryService.reserveStock(order.getItems());\n\n            \/\/ \u652f\u6255\u3044\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a\n            paymentService.processPayment(order.getPayment());\n\n            \/\/ \u6ce8\u6587\u306e\u4fdd\u5b58\n            orderRepository.save(order);\n\n        } catch (Exception e) {\n            \/\/ \u88dc\u511f\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u306e\u5b9f\u884c\n            compensateTransaction(order);\n            throw new ServiceException(\"\u5206\u6563\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5931\u6557\", e);\n        }\n    }\n}<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"i-91\">3. \u30c7\u30fc\u30bf\u4e00\u8cab\u6027\u306e\u78ba\u4fdd<\/h6>\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=\"\">@Configuration\npublic class ConsistencyConfig {\n    @Bean\n    public TransactionTemplate transactionTemplate() {\n        return new TransactionTemplate(transactionManager());\n    }\n\n    @Bean\n    public EventPublisher eventPublisher() {\n        return new EventPublisher() {\n            @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)\n            public void handleEvent(DomainEvent event) {\n                \/\/ \u30a4\u30d9\u30f3\u30c8\u306e\u767a\u884c\u51e6\u7406\n                kafkaTemplate.send(\"domain-events\", event);\n            }\n        };\n    }\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-92\">\u4eca\u5f8c\u306e\u5c55\u671b\u3068\u6ce8\u76ee\u30dd\u30a4\u30f3\u30c8<\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u5bfe\u5fdc\u306e\u5f37\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kubernetes\u74b0\u5883\u3067\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u30b3\u30f3\u30c6\u30ca\u5316\u3078\u306e\u5bfe\u5fdc\u6539\u5584<\/li>\n\n\n\n<li>\u30af\u30e9\u30a6\u30c9\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a\u5f37\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u30b5\u30dd\u30fc\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=\"\">@Repository\npublic interface ReactiveProductRepository extends ReactiveCrudRepository&lt;Product, Long&gt; {\n    Flux&lt;Product&gt; findByCategory(String category);\n    Mono&lt;Product&gt; findByIdWithDetails(Long id);\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>GraphQL\u30b5\u30dd\u30fc\u30c8\u306e\u5145\u5b9f<\/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=\"\">@QueryMapping\npublic Flux&lt;Product&gt; products(@Argument String category) {\n    return productRepository.findByCategory(category)\n        .map(productMapper::toDTO);\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u65b0\u6a5f\u80fd\u3068\u6539\u5584\u70b9\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u52b9\u7387\u7684\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002Hibernate\u306f\u7d99\u7d9a\u7684\u306b\u9032\u5316\u3092\u7d9a\u3051\u3066\u304a\u308a\u3001\u4eca\u5f8c\u3082\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u74b0\u5883\u3084\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306b\u5bfe\u5fdc\u3057\u305f\u6a5f\u80fd\u306e\u5f37\u5316\u304c\u671f\u5f85\u3055\u308c\u307e\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":[1],"tags":[],"class_list":{"0":"post-1165","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-uncategorized","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1165","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=1165"}],"version-history":[{"count":5,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1165\/revisions"}],"predecessor-version":[{"id":1173,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1165\/revisions\/1173"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}