{"id":34003,"date":"2025-11-09T21:40:57","date_gmt":"2025-11-09T18:40:57","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=34003"},"modified":"2025-11-09T21:40:57","modified_gmt":"2025-11-09T18:40:57","slug":"spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/","title":{"rendered":"Spring Hibernate Entegrasyonu \u00d6rne\u011fi: Spring 4, Hibernate 3 ve Hibernate 4 ile Ad\u0131m Ad\u0131m Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>Spring Hibernate Entegrasyonu \u00d6rne\u011fi: Spring 4, Hibernate 3 ve Hibernate 4 ile Ad\u0131m Ad\u0131m Rehber<\/h2>\n<h2>Giri\u015f<\/h2>\n<p>Modern kurumsal uygulamalar\u0131n geli\u015ftirilmesinde, veri kal\u0131c\u0131l\u0131\u011f\u0131 (data persistence) ve i\u015f mant\u0131\u011f\u0131n\u0131n y\u00f6netimi temel zorluklardan biridir. Java ekosisteminde bu zorluklar\u0131 a\u015fmak i\u00e7in iki g\u00fc\u00e7l\u00fc \u00e7er\u00e7eve \u00f6ne \u00e7\u0131kar: Spring Framework ve Hibernate. Spring, ba\u011f\u0131ml\u0131l\u0131k enjeksiyonu (DI), y\u00f6nelimli programlama (AOP) ve \u00e7e\u015fitli mod\u00fclleriyle uygulama geli\u015ftirme s\u00fcrecini basitle\u015ftirirken; Hibernate, nesne-ili\u015fkisel e\u015fleme (ORM) yetenekleri sayesinde veritaban\u0131 i\u015flemlerini nesne tabanl\u0131 bir yakla\u015f\u0131mla y\u00f6netmeyi sa\u011flar.<\/p>\n<p>Bu makale, Spring 4 s\u00fcr\u00fcm\u00fcn\u00fc kullanarak hem Hibernate 3 hem de Hibernate 4 ile entegrasyonun nas\u0131l ger\u00e7ekle\u015ftirilece\u011fini ayr\u0131nt\u0131l\u0131 bir \u015fekilde ele alacakt\u0131r. Amac\u0131m\u0131z, bu iki g\u00fc\u00e7l\u00fc teknolojiyi bir araya getirerek sa\u011flam, s\u00fcrd\u00fcr\u00fclebilir ve y\u00f6netilebilir bir veri katman\u0131 olu\u015fturmak i\u00e7in ad\u0131m ad\u0131m bir rehber sunmakt\u0131r. Spring&#8217;in sa\u011flad\u0131\u011f\u0131 soyutlamalar ve Hibernate&#8217;in ORM g\u00fcc\u00fc sayesinde, veritaban\u0131 etkile\u015fimleri daha temiz ve daha az hataya a\u00e7\u0131k hale gelir. Bu entegrasyonun faydalar\u0131n\u0131, temel kavramlar\u0131, yap\u0131land\u0131rma ad\u0131mlar\u0131n\u0131 ve \u00f6rnek kodlar\u0131 inceleyece\u011fiz.<\/p>\n<h2>Spring Framework&#8217;e K\u0131sa Bir Bak\u0131\u015f<\/h2>\n<p>Spring Framework, Java platformu i\u00e7in a\u00e7\u0131k kaynakl\u0131 bir uygulama geli\u015ftirme \u00e7er\u00e7evesidir. Temel amac\u0131, kurumsal Java uygulamalar\u0131n\u0131n geli\u015ftirme s\u00fcrecini basitle\u015ftirmek ve geli\u015ftiricilere g\u00fc\u00e7l\u00fc ara\u00e7lar sunmakt\u0131r. Spring&#8217;in en \u00f6nemli \u00f6zellikleri \u015funlard\u0131r:<\/p>\n<h3>Inversion of Control (IoC) \/ Dependency Injection (DI)<\/h3>\n<p>Spring&#8217;in kalbinde IoC prensibi yatar. Bu prensip, nesnelerin ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 kendilerinin olu\u015fturmas\u0131 yerine, bir &#8220;kapsay\u0131c\u0131&#8221; (container) taraf\u0131ndan d\u0131\u015far\u0131dan enjekte edilmesini ifade eder. Bu, bile\u015fenler aras\u0131ndaki ba\u011f\u0131ml\u0131l\u0131klar\u0131 azalt\u0131r, kodu daha mod\u00fcler ve test edilebilir hale getirir.<\/p>\n<h3>Aspect-Oriented Programming (AOP)<\/h3>\n<p>AOP, loglama, g\u00fcvenlik, i\u015flem y\u00f6netimi gibi \u00e7apraz kesen endi\u015feleri (cross-cutting concerns) merkezi bir yerde tan\u0131mlayarak kod tekrar\u0131n\u0131 azalt\u0131r ve mod\u00fclerli\u011fi art\u0131r\u0131r. Spring, bu t\u00fcr endi\u015feleri metod \u00e7a\u011fr\u0131lar\u0131n\u0131n \u00f6ncesine, sonras\u0131na veya etraf\u0131na eklemeyi sa\u011flar.<\/p>\n<h3>Mod\u00fcler Yap\u0131<\/h3>\n<p>Spring, Core, Context, Web, Data Access\/ORM gibi bir\u00e7ok mod\u00fclden olu\u015fur. Bu mod\u00fcler yap\u0131 sayesinde, geli\u015ftiriciler sadece ihtiya\u00e7 duyduklar\u0131 bile\u015fenleri kullanabilirler, bu da uygulaman\u0131n ayak izini k\u00fc\u00e7\u00fclt\u00fcr. \u00d6zellikle Data Access\/ORM mod\u00fcl\u00fc, JDBC, JPA, JDO ve Hibernate gibi veri eri\u015fim teknolojileriyle entegrasyonu kolayla\u015ft\u0131r\u0131r.<\/p>\n<h2>Hibernate&#8217;e K\u0131sa Bir Bak\u0131\u015f<\/h2>\n<p>Hibernate, Java i\u00e7in pop\u00fcler bir nesne-ili\u015fkisel e\u015fleme (ORM) \u00e7er\u00e7evesidir. Geli\u015ftiricilerin veritaban\u0131 i\u015flemlerini do\u011frudan SQL sorgular\u0131 yazmak yerine, Java nesneleri (POJO&#8217;lar) \u00fczerinden ger\u00e7ekle\u015ftirmesini sa\u011flar.<\/p>\n<h3>ORM Prensibi<\/h3>\n<p>ORM, bir uygulaman\u0131n nesne modelini bir ili\u015fkisel veritaban\u0131n\u0131n \u015fema modeline e\u015fleme tekni\u011fidir. Hibernate, Java s\u0131n\u0131flar\u0131n\u0131 veritaban\u0131 tablolar\u0131na, s\u0131n\u0131f \u00f6zelliklerini tablo s\u00fctunlar\u0131na ve nesneler aras\u0131ndaki ili\u015fkileri veritaban\u0131 ili\u015fkilerine e\u015fler. Bu sayede, geli\u015ftiriciler veritaban\u0131 detaylar\u0131yla u\u011fra\u015fmak yerine i\u015f mant\u0131\u011f\u0131na odaklanabilirler.<\/p>\n<h3>Veritaban\u0131 Ba\u011f\u0131ms\u0131zl\u0131\u011f\u0131<\/h3>\n<p>Hibernate, \u00e7e\u015fitli veritaban\u0131 sistemlerini destekler. Uygulama kodunuzda herhangi bir de\u011fi\u015fiklik yapmadan farkl\u0131 bir veritaban\u0131na ge\u00e7i\u015f yapman\u0131z\u0131 sa\u011flar, \u00e7\u00fcnk\u00fc veritaban\u0131na \u00f6zg\u00fc SQL ifadelerini otomatik olarak \u00fcretir.<\/p>\n<h3>Mapping (XML\/Annotations)<\/h3>\n<p>Nesnelerin veritaban\u0131 tablolar\u0131na nas\u0131l e\u015flenece\u011fi, XML yap\u0131land\u0131rma dosyalar\u0131 veya Java anotasyonlar\u0131 kullan\u0131larak belirtilebilir. Annotasyonlar, \u00f6zellikle modern uygulamalarda daha yayg\u0131n ve okunabilir bir y\u00f6ntemdir.<\/p>\n<h3>Session ve SessionFactory<\/h3>\n<p>Hibernate&#8217;in temel API&#8217;leri <code>SessionFactory<\/code> ve <code>Session<\/code>&#8216;d\u0131r. <code>SessionFactory<\/code>, bir veritaban\u0131na ba\u011flanan ve <code>Session<\/code> nesneleri olu\u015fturan bir fabrika g\u00f6revi g\u00f6r\u00fcr. <code>Session<\/code> ise, veritaban\u0131 ile etkile\u015fim kurmak i\u00e7in kullan\u0131lan ana aray\u00fczd\u00fcr; nesneleri kaydetme, g\u00fcncelleme, silme ve sorgulama gibi i\u015flemleri ger\u00e7ekle\u015ftirir. Her bir veritaban\u0131 i\u015flemi i\u00e7in genellikle bir <code>Session<\/code> a\u00e7\u0131l\u0131r ve i\u015flem sonunda kapat\u0131l\u0131r.<\/p>\n<h2>Neden Spring ve Hibernate Birlikte Kullan\u0131lmal\u0131?<\/h2>\n<p>Spring ve Hibernate&#8217;in entegrasyonu, her iki \u00e7er\u00e7evenin de g\u00fc\u00e7l\u00fc y\u00f6nlerini birle\u015ftirerek uygulama geli\u015ftirmede \u00f6nemli avantajlar sunar:<\/p>\n<h3>Deklaratif \u0130\u015flem Y\u00f6netimi (Declarative Transaction Management)<\/h3>\n<p>Spring, Hibernate ile entegre oldu\u011funda g\u00fc\u00e7l\u00fc i\u015flem y\u00f6netimi yetenekleri sunar. Geli\u015ftiriciler, <code>@Transactional<\/code> anotasyonunu kullanarak veya XML yap\u0131land\u0131rmas\u0131 ile metodlar\u0131n i\u015flem s\u0131n\u0131rlar\u0131n\u0131 belirleyebilirler. Bu sayede, i\u015flem a\u00e7ma, commit etme ve geri alma gibi tekrarlayan kodlar ortadan kalkar ve i\u015f mant\u0131\u011f\u0131 daha temiz hale gelir.<\/p>\n<h3>DAO Katman\u0131 Soyutlamas\u0131 ve Kolay Kullan\u0131m<\/h3>\n<p>Spring&#8217;in ORM mod\u00fcl\u00fc, Hibernate&#8217;in d\u00fc\u015f\u00fck seviyeli API&#8217;lerini soyutlar. \u00d6zellikle Hibernate 3 zaman\u0131nda yayg\u0131n olarak kullan\u0131lan <code>HibernateTemplate<\/code> s\u0131n\u0131f\u0131, geli\u015ftiricilerin <code>Session<\/code> y\u00f6netimini d\u00fc\u015f\u00fcnmeden veri eri\u015fim i\u015flemlerini yapmas\u0131n\u0131 sa\u011fl\u0131yordu. Hibernate 4 ve sonras\u0131nda <code>HibernateTemplate<\/code>&#8216;in kullan\u0131m\u0131 azalsa da, Spring&#8217;in <code>LocalSessionFactoryBean<\/code> gibi yard\u0131mc\u0131 s\u0131n\u0131flar\u0131, <code>SessionFactory<\/code>&#8216;nin Spring IoC konteyneri taraf\u0131ndan y\u00f6netilmesini kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3>Tek Tip \u0130stisna Y\u00f6netimi<\/h3>\n<p>Hibernate veya di\u011fer veri eri\u015fim teknolojileri, kendilerine \u00f6zg\u00fc istisnalar f\u0131rlatabilir. Spring, bu istisnalar\u0131 kendi <code>DataAccessException<\/code> hiyerar\u015fisine d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. Bu, uygulaman\u0131n veri eri\u015fim katman\u0131nda daha tutarl\u0131 ve ta\u015f\u0131nabilir bir istisna y\u00f6netimi sa\u011flamas\u0131na yard\u0131mc\u0131 olur.<\/p>\n<h3>Ba\u011f\u0131ml\u0131l\u0131k Enjeksiyonu ile Kolay Y\u00f6netim<\/h3>\n<p>Spring&#8217;in DI yetenekleri sayesinde, Hibernate <code>SessionFactory<\/code> nesnesi, DAO katmanlar\u0131 ve servis katmanlar\u0131 gibi bile\u015fenler kolayca yap\u0131land\u0131r\u0131labilir ve birbirine enjekte edilebilir. Bu, uygulaman\u0131n bile\u015fenlerini daha gev\u015fek ba\u011fl\u0131 (loosely coupled) ve test edilebilir hale getirir.<\/p>\n<h2>Proje Kurulumu ve Ba\u011f\u0131ml\u0131l\u0131klar<\/h2>\n<p>Bir Spring-Hibernate entegrasyon projesi olu\u015fturmak i\u00e7in gerekli temel ad\u0131mlar ve ba\u011f\u0131ml\u0131l\u0131klar \u015funlard\u0131r:<\/p>\n<h3>Geli\u015ftirme Ortam\u0131<\/h3>\n<p>*   <strong>IDE:<\/strong> IntelliJ IDEA, Eclipse veya Spring Tool Suite (STS) gibi bir entegre geli\u015ftirme ortam\u0131.<br \/>\n*   <strong>Derleme Arac\u0131:<\/strong> Maven veya Gradle. Bu makalede Maven kullan\u0131lacakt\u0131r.<br \/>\n*   <strong>JDK:<\/strong> Java Development Kit (JDK) 8 veya \u00fczeri.<\/p>\n<h3>Maven Ba\u011f\u0131ml\u0131l\u0131klar\u0131<\/h3>\n<p><code>pom.xml<\/code> dosyan\u0131za eklemeniz gereken temel ba\u011f\u0131ml\u0131l\u0131klar:<\/p>\n<h4>Spring Framework Ba\u011f\u0131ml\u0131l\u0131klar\u0131 (Spring 4)<\/h4>\n<pre><code class=\"language-xml\"><dependency>\n    <groupId>org.springframework<\/groupId>\n    <artifactId>spring-core<\/artifactId>\n    <version>4.3.30.RELEASE<\/version>\n<\/dependency>\n<dependency>\n    <groupId>org.springframework<\/groupId>\n    <artifactId>spring-context<\/artifactId>\n    <version>4.3.30.RELEASE<\/version>\n<\/dependency>\n<dependency>\n    <groupId>org.springframework<\/groupId>\n    <artifactId>spring-orm<\/artifactId>\n    <version>4.3.30.RELEASE<\/version>\n<\/dependency>\n<dependency>\n    <groupId>org.springframework<\/groupId>\n    <artifactId>spring-tx<\/artifactId>\n    <version>4.3.30.RELEASE<\/version>\n<\/dependency>\n<dependency>\n    <groupId>org.springframework<\/groupId>\n    <artifactId>spring-test<\/artifactId>\n    <version>4.3.30.RELEASE<\/version>\n    <scope>test<\/scope>\n<\/dependency><\/code><\/pre>\n<h4>Hibernate Ba\u011f\u0131ml\u0131l\u0131klar\u0131<\/h4>\n<p><strong>Hibernate 3 i\u00e7in:<\/strong><\/p>\n<pre><code class=\"language-xml\"><dependency>\n    <groupId>org.hibernate<\/groupId>\n    <artifactId>hibernate<\/artifactId>\n    <version>3.6.10.Final<\/version>\n<\/dependency>\n<!-- JPA deste\u011fi i\u00e7in (iste\u011fe ba\u011fl\u0131 ama \u00f6nerilir) -->\n<dependency>\n    <groupId>org.hibernate<\/groupId>\n    <artifactId>hibernate-entitymanager<\/artifactId>\n    <version>3.6.10.Final<\/version>\n<\/dependency><\/code><\/pre>\n<p><strong>Hibernate 4 i\u00e7in:<\/strong><\/p>\n<pre><code class=\"language-xml\"><dependency>\n    <groupId>org.hibernate<\/groupId>\n    <artifactId>hibernate-core<\/artifactId>\n    <version>4.3.11.Final<\/version>\n<\/dependency>\n<!-- JPA deste\u011fi i\u00e7in (iste\u011fe ba\u011fl\u0131 ama \u00f6nerilir) -->\n<dependency>\n    <groupId>org.hibernate<\/groupId>\n    <artifactId>hibernate-entitymanager<\/artifactId>\n    <version>4.3.11.Final<\/version>\n<\/dependency><\/code><\/pre>\n<h4>Veritaban\u0131 S\u00fcr\u00fcc\u00fcs\u00fc<\/h4>\n<p>\u00d6rne\u011fin MySQL i\u00e7in:<\/p>\n<pre><code class=\"language-xml\"><dependency>\n    <groupId>mysql<\/groupId>\n    <artifactId>mysql-connector-java<\/artifactId>\n    <version>5.1.49<\/version> <!-- Veya daha yeni bir 8.x s\u00fcr\u00fcm\u00fc -->\n<\/dependency><\/code><\/pre>\n<p>Veya H2 in-memory veritaban\u0131 i\u00e7in (test ama\u00e7l\u0131):<\/p>\n<pre><code class=\"language-xml\"><dependency>\n    <groupId>com.h2database<\/groupId>\n    <artifactId>h2<\/artifactId>\n    <version>1.4.200<\/version>\n    <scope>runtime<\/scope>\n<\/dependency><\/code><\/pre>\n<h4>Veritaban\u0131 Ba\u011flant\u0131 Havuzu (Connection Pool)<\/h4>\n<p>\u00dcretim ortamlar\u0131 i\u00e7in <code>BasicDataSource<\/code> (Apache Commons DBCP) veya <code>HikariCP<\/code> gibi bir ba\u011flant\u0131 havuzu kullan\u0131lmas\u0131 \u00f6nerilir.<\/p>\n<pre><code class=\"language-xml\"><dependency>\n    <groupId>commons-dbcp<\/groupId>\n    <artifactId>commons-dbcp<\/artifactId>\n    <version>1.4<\/version>\n<\/dependency><\/code><\/pre>\n<h4>Loglama<\/h4>\n<pre><code class=\"language-xml\"><dependency>\n    <groupId>org.slf4j<\/groupId>\n    <artifactId>slf4j-api<\/artifactId>\n    <version>1.7.30<\/version>\n<\/dependency>\n<dependency>\n    <groupId>ch.qos.logback<\/groupId>\n    <artifactId>logback-classic<\/artifactId>\n    <version>1.2.3<\/version>\n<\/dependency><\/code><\/pre>\n<h2>Hibernate 3 ve Spring 4 Entegrasyonu<\/h2>\n<p>Spring 4 ile Hibernate 3 entegrasyonu, genellikle XML tabanl\u0131 yap\u0131land\u0131rma ile ger\u00e7ekle\u015ftirilir.<\/p>\n<h3>Veritaban\u0131 Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Veritaban\u0131 ba\u011flant\u0131 bilgilerini tan\u0131mlamak i\u00e7in <code>DriverManagerDataSource<\/code> veya bir ba\u011flant\u0131 havuzu (\u00f6rn. <code>BasicDataSource<\/code>) kullanabiliriz.<\/p>\n<pre><code class=\"language-xml\"><!-- applicationContext.xml -->\n<bean id=\"dataSource\" class=\"org.apache.commons.dbcp.BasicDataSource\" destroy-method=\"close\">\n    <property name=\"driverClassName\" value=\"com.mysql.jdbc.Driver\"\/>\n    <property name=\"url\" value=\"jdbc:mysql:\/\/localhost:3306\/mydb\"\/>\n    <property name=\"username\" value=\"root\"\/>\n    <property name=\"password\" value=\"password\"\/>\n<\/bean><\/code><\/pre>\n<h3>Hibernate 3 Yap\u0131land\u0131rmas\u0131: LocalSessionFactoryBean<\/h3>\n<p>Spring, Hibernate <code>SessionFactory<\/code>&#8216;yi IoC konteynerinde y\u00f6netmek i\u00e7in <code>org.springframework.orm.hibernate3.LocalSessionFactoryBean<\/code> s\u0131n\u0131f\u0131n\u0131 sa\u011flar. Bu bean, Hibernate \u00f6zelliklerini, e\u015fleme kaynaklar\u0131n\u0131 ve veri kayna\u011f\u0131n\u0131 (dataSource) yap\u0131land\u0131rman\u0131za olanak tan\u0131r.<\/p>\n<pre><code class=\"language-xml\"><!-- applicationContext.xml -->\n<bean id=\"sessionFactory\" class=\"org.springframework.orm.hibernate3.LocalSessionFactoryBean\">\n    <property name=\"dataSource\" ref=\"dataSource\"\/>\n    <property name=\"hibernateProperties\">\n        <props>\n            <prop key=\"hibernate.dialect\">org.hibernate.dialect.MySQLDialect<\/prop>\n            <prop key=\"hibernate.show_sql\">true<\/prop>\n            <prop key=\"hibernate.hbm2ddl.auto\">update<\/prop> <!-- create | update | create-drop -->\n        <\/props>\n    <\/property>\n    <property name=\"mappingResources\">\n        <!-- E\u011fer XML mapping kullan\u0131yorsan\u0131z -->\n        <list>\n            <value>com\/example\/model\/User.hbm.xml<\/value>\n        <\/list>\n    <\/property>\n    <property name=\"annotatedClasses\">\n        <!-- E\u011fer anotasyonlu s\u0131n\u0131flar kullan\u0131yorsan\u0131z -->\n        <list>\n            <value>com.example.model.User<\/value>\n        <\/list>\n    <\/property>\n<\/bean><\/code><\/pre>\n<h3>Spring \u0130\u015flem Y\u00f6netimi (Transaction Management)<\/h3>\n<p>Spring, Hibernate ile i\u015flem y\u00f6netimini <code>HibernateTransactionManager<\/code> arac\u0131l\u0131\u011f\u0131yla sa\u011flar.<\/p>\n<pre><code class=\"language-xml\"><!-- applicationContext.xml -->\n<bean id=\"transactionManager\" class=\"org.springframework.orm.hibernate3.HibernateTransactionManager\">\n    <property name=\"sessionFactory\" ref=\"sessionFactory\"\/>\n<\/bean>\n\n<!-- @Transactional anotasyonunu etkinle\u015ftirir -->\n<tx:annotation-driven transaction-manager=\"transactionManager\"\/><\/code><\/pre>\n<h3>\u00d6rnek Varl\u0131k S\u0131n\u0131f\u0131 (Entity)<\/h3>\n<p>Bir <code>User<\/code> varl\u0131k s\u0131n\u0131f\u0131 tan\u0131mlayal\u0131m. Hem Hibernate 3 hem de 4&#8217;te anotasyonlar kullan\u0131labilir.<\/p>\n<pre><code class=\"language-java\">\/\/ com.example.model.User.java\npackage com.example.model;\n\nimport javax.persistence.*; \/\/ JPA anotasyonlar\u0131\n\n@Entity\n@Table(name = \"USERS\") \/\/ Veritaban\u0131ndaki tablo ad\u0131\npublic class User {\n\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY) \/\/ Otomatik artan ID\n    @Column(name = \"USER_ID\")\n    private Long id;\n\n    @Column(name = \"USERNAME\", unique = true, nullable = false)\n    private String username;\n\n    @Column(name = \"EMAIL\")\n    private String email;\n\n    \/\/ Getter ve Setter metotlar\u0131\n    public Long getId() { return id; }\n    public void setId(Long id) { this.id = id; }\n    public String getUsername() { return username; }\n    public void setUsername(String username) { this.username = username; }\n    public String getEmail() { return email; }\n    public void setEmail(String email) { this.email = email; }\n\n    @Override\n    public String toString() {\n        return \"User{\" +\n               \"id=\" + id +\n               \", username='\" + username + '\\'' +\n               \", email='\" + email + '\\'' +\n               '}';\n    }\n}<\/code><\/pre>\n<h3>DAO Katman\u0131 (Hibernate 3 i\u00e7in HibernateTemplate)<\/h3>\n<p>Hibernate 3 entegrasyonunda, <code>HibernateTemplate<\/code> s\u0131n\u0131f\u0131 DAO katman\u0131n\u0131 basitle\u015ftirmek i\u00e7in yayg\u0131n olarak kullan\u0131l\u0131rd\u0131. <code>HibernateTemplate<\/code>, <code>Session<\/code> y\u00f6netimini ve istisna d\u00f6n\u00fc\u015ft\u00fcrmeyi otomatik olarak halleder.<\/p>\n<pre><code class=\"language-java\">\/\/ com.example.dao.UserDAO.java\npackage com.example.dao;\n\nimport com.example.model.User;\nimport java.util.List;\n\npublic interface UserDAO {\n    void saveUser(User user);\n    User getUserById(Long id);\n    List<User> getAllUsers();\n    void updateUser(User user);\n    void deleteUser(Long id);\n}\n\n\/\/ com.example.dao.UserDAOImpl.java\npackage com.example.dao.impl;\n\nimport com.example.dao.UserDAO;\nimport com.example.model.User;\nimport org.springframework.orm.hibernate3.HibernateTemplate; \/\/ Hibernate 3 i\u00e7in\nimport java.util.List;\n\npublic class UserDAOImpl implements UserDAO {\n\n    private HibernateTemplate hibernateTemplate;\n\n    \/\/ Spring taraf\u0131ndan enjekte edilecek\n    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {\n        this.hibernateTemplate = hibernateTemplate;\n    }\n\n    @Override\n    public void saveUser(User user) {\n        hibernateTemplate.save(user);\n    }\n\n    @Override\n    public User getUserById(Long id) {\n        return hibernateTemplate.get(User.class, id);\n    }\n\n    @Override\n    public List<User> getAllUsers() {\n        return hibernateTemplate.loadAll(User.class);\n    }\n\n    @Override\n    public void updateUser(User user) {\n        hibernateTemplate.update(user);\n    }\n\n    @Override\n    public void deleteUser(Long id) {\n        User user = getUserById(id);\n        if (user != null) {\n            hibernateTemplate.delete(user);\n        }\n    }\n}<\/code><\/pre>\n<p>DAO&#8217;yu Spring yap\u0131land\u0131rmas\u0131na ekleyin:<\/p>\n<pre><code class=\"language-xml\"><!-- applicationContext.xml -->\n<bean id=\"userDAO\" class=\"com.example.dao.impl.UserDAOImpl\">\n    <property name=\"hibernateTemplate\">\n        <bean class=\"org.springframework.orm.hibernate3.HibernateTemplate\">\n            <property name=\"sessionFactory\" ref=\"sessionFactory\"\/>\n        <\/bean>\n    <\/property>\n<\/bean><\/code><\/pre>\n<h3>Servis Katman\u0131<\/h3>\n<p>Servis katman\u0131, i\u015f mant\u0131\u011f\u0131n\u0131 i\u00e7erir ve DAO katman\u0131n\u0131 kullan\u0131r. <code>@Transactional<\/code> anotasyonu burada kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-java\">\/\/ com.example.service.UserService.java\npackage com.example.service;\n\nimport com.example.model.User;\nimport java.util.List;\n\npublic interface UserService {\n    void addUser(User user);\n    User getUserById(Long id);\n    List<User> getAllUsers();\n    void updateUser(User user);\n    void deleteUser(Long id);\n}\n\n\/\/ com.example.service.impl.UserServiceImpl.java\npackage com.example.service.impl;\n\nimport com.example.dao.UserDAO;\nimport com.example.model.User;\nimport com.example.service.UserService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\nimport java.util.List;\n\n@Service(\"userService\")\n@Transactional \/\/ Bu s\u0131n\u0131f\u0131n t\u00fcm public metotlar\u0131 transactional olacakt\u0131r\npublic class UserServiceImpl implements UserService {\n\n    @Autowired\n    private UserDAO userDAO;\n\n    @Override\n    public void addUser(User user) {\n        userDAO.saveUser(user);\n    }\n\n    @Override\n    public User getUserById(Long id) {\n        return userDAO.getUserById(id);\n    }\n\n    @Override\n    public List<User> getAllUsers() {\n        return userDAO.getAllUsers();\n    }\n\n    @Override\n    public void updateUser(User user) {\n        userDAO.updateUser(user);\n    }\n\n    @Override\n    public void deleteUser(Long id) {\n        userDAO.deleteUser(id);\n    }\n}<\/code><\/pre>\n<p>Servis katman\u0131n\u0131 Spring yap\u0131land\u0131rmas\u0131na ekleyin ve bile\u015fen taramas\u0131n\u0131 etkinle\u015ftirin:<\/p>\n<pre><code class=\"language-xml\"><!-- applicationContext.xml -->\n<context:component-scan base-package=\"com.example\"\/><\/code><\/pre>\n<h3>Test Etme<\/h3>\n<p>Basit bir ana metot ile uygulamay\u0131 test edebilirsiniz.<\/p>\n<pre><code class=\"language-java\">\/\/ com.example.main.AppMain.java\npackage com.example.main;\n\nimport com.example.model.User;\nimport com.example.service.UserService;\nimport org.springframework.context.ApplicationContext;\nimport org.springframework.context.support.ClassPathXmlApplicationContext;\n\npublic class AppMain {\n    public static void main(String[] args) {\n        ApplicationContext context = new ClassPathXmlApplicationContext(\"applicationContext.xml\");\n        UserService userService = (UserService) context.getBean(\"userService\");\n\n        \/\/ Yeni kullan\u0131c\u0131 ekle\n        User user1 = new User();\n        user1.setUsername(\"john.doe\");\n        user1.setEmail(\"john.doe@example.com\");\n        userService.addUser(user1);\n        System.out.println(\"Added user: \" + user1);\n\n        \/\/ Kullan\u0131c\u0131y\u0131 ID ile bul\n        User foundUser = userService.getUserById(user1.getId());\n        System.out.println(\"Found user: \" + foundUser);\n\n        \/\/ Kullan\u0131c\u0131y\u0131 g\u00fcncelle\n        foundUser.setEmail(\"john.new.email@example.com\");\n        userService.updateUser(foundUser);\n        System.out.println(\"Updated user: \" + userService.getUserById(foundUser.getId()));\n\n        \/\/ T\u00fcm kullan\u0131c\u0131lar\u0131 listele\n        System.out.println(\"All users:\");\n        userService.getAllUsers().forEach(System.out::println);\n\n        \/\/ Kullan\u0131c\u0131y\u0131 sil\n        userService.deleteUser(foundUser.getId());\n        System.out.println(\"User deleted. All users after deletion:\");\n        userService.getAllUsers().forEach(System.out::println);\n    }\n}<\/code><\/pre>\n<h2>Hibernate 4 ve Spring 4 Entegrasyonu<\/h2>\n<p>Hibernate 4, baz\u0131 i\u00e7 de\u011fi\u015fikliklerle geldi. Spring&#8217;in <code>LocalSessionFactoryBean<\/code>&#8216;i bu de\u011fi\u015fikliklere uyum sa\u011flayacak \u015fekilde g\u00fcncellendi. <code>HibernateTemplate<\/code> kullan\u0131m\u0131 Hibernate 4 ile birlikte tavsiye edilmemeye ba\u015fland\u0131 ve daha \u00e7ok native Hibernate API&#8217;si (<code>SessionFactory.getCurrentSession()<\/code>) tercih edildi. Ayr\u0131ca, Spring 4 ile Java tabanl\u0131 (Java Config) yap\u0131land\u0131rma daha da pop\u00fcler hale geldi.<\/p>\n<h3>Hibernate 4&#8217;teki De\u011fi\u015fiklikler<\/h3>\n<p>*   <strong>ServiceRegistry:<\/strong> Hibernate 4, \u00e7e\u015fitli hizmetleri y\u00f6netmek i\u00e7in <code>ServiceRegistry<\/code> kavram\u0131n\u0131 tan\u0131tt\u0131. Spring ile entegrasyonda bu genellikle soyutlan\u0131r.<br \/>\n*   <code>SessionFactory<\/code> olu\u015fturma mekanizmas\u0131nda baz\u0131 i\u00e7 de\u011fi\u015fiklikler oldu, ancak Spring&#8217;in <code>LocalSessionFactoryBean<\/code>&#8216;i bu de\u011fi\u015fiklikleri arka planda y\u00f6netmeye devam etti.<br \/>\n*   <code>getCurrentSession()<\/code> metodu, <code>Session<\/code>&#8216;\u0131 i\u015flem kapsam\u0131na ba\u011flamak i\u00e7in hala ana y\u00f6ntemdir.<\/p>\n<h3>Spring 4 ve Hibernate 4 Yap\u0131land\u0131rmas\u0131 (XML)<\/h3>\n<p>XML yap\u0131land\u0131rmas\u0131 Hibernate 3&#8217;tekine benzerdir, ancak <code>LocalSessionFactoryBean<\/code>&#8216;in s\u0131n\u0131f yolu <code>org.springframework.orm.hibernate4.LocalSessionFactoryBean<\/code> olarak de\u011fi\u015fir ve Hibernate \u00f6zellikleri g\u00fcncel s\u00fcr\u00fcme g\u00f6re ayarlan\u0131r.<\/p>\n<pre><code class=\"language-xml\"><!-- applicationContext.xml -->\n<!-- DataSource tan\u0131m\u0131 ayn\u0131 kal\u0131r -->\n<bean id=\"dataSource\" class=\"org.apache.commons.dbcp.BasicDataSource\" destroy-method=\"close\">\n    <property name=\"driverClassName\" value=\"com.mysql.jdbc.Driver\"\/> <!-- MySQL 8+ i\u00e7in com.mysql.cj.jdbc.Driver -->\n    <property name=\"url\" value=\"jdbc:mysql:\/\/localhost:3306\/mydb\"\/>\n    <property name=\"username\" value=\"root\"\/>\n    <property name=\"password\" value=\"password\"\/>\n<\/bean>\n\n<!-- Hibernate 4 i\u00e7in LocalSessionFactoryBean -->\n<bean id=\"sessionFactory\" class=\"org.springframework.orm.hibernate4.LocalSessionFactoryBean\">\n    <property name=\"dataSource\" ref=\"dataSource\"\/>\n    <property name=\"hibernateProperties\">\n        <props>\n            <prop key=\"hibernate.dialect\">org.hibernate.dialect.MySQL5Dialect<\/prop> <!-- Veya MySQL8Dialect -->\n            <prop key=\"hibernate.show_sql\">true<\/prop>\n            <prop key=\"hibernate.hbm2ddl.auto\">update<\/prop>\n            <prop key=\"hibernate.current_session_context_class\">org.springframework.orm.hibernate4.SpringSessionContext<\/prop>\n        <\/props>\n    <\/property>\n    <property name=\"packagesToScan\" value=\"com.example.model\"\/> <!-- Anotasyonlu s\u0131n\u0131flar\u0131 taramak i\u00e7in -->\n<\/bean>\n\n<!-- Hibernate 4 i\u00e7in HibernateTransactionManager -->\n<bean id=\"transactionManager\" class=\"org.springframework.orm.hibernate4.HibernateTransactionManager\">\n    <property name=\"sessionFactory\" ref=\"sessionFactory\"\/>\n<\/bean>\n\n<tx:annotation-driven transaction-manager=\"transactionManager\"\/>\n<context:component-scan base-package=\"com.example\"\/><\/code><\/pre>\n<p><strong>Not:<\/strong> <code>hibernate.current_session_context_class<\/code> \u00f6zelli\u011fi, Spring&#8217;in <code>Session<\/code>&#8216;\u0131 mevcut i\u015fleme ba\u011flamas\u0131na izin vermek i\u00e7in \u00f6nemlidir. <code>packagesToScan<\/code> \u00f6zelli\u011fi, <code>mappingResources<\/code> veya <code>annotatedClasses<\/code> yerine t\u00fcm paket alt\u0131ndaki anotasyonlu s\u0131n\u0131flar\u0131 otomatik olarak bulmak i\u00e7in daha kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h3>DAO Katman\u0131 G\u00fcncellemesi (Native Hibernate API)<\/h3>\n<p>Hibernate 4 ile <code>HibernateTemplate<\/code> kullan\u0131m\u0131 yerine do\u011frudan <code>SessionFactory<\/code>&#8216;den <code>Session<\/code> al\u0131p i\u015flemler yapmak daha yayg\u0131n hale geldi.<\/p>\n<pre><code class=\"language-java\">\/\/ com.example.dao.impl.UserDAOImpl.java (Hibernate 4 i\u00e7in)\npackage com.example.dao.impl;\n\nimport com.example.dao.UserDAO;\nimport com.example.model.User;\nimport org.hibernate.Session;\nimport org.hibernate.SessionFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Repository; \/\/ DAO katman\u0131 i\u00e7in @Repository anotasyonu\n\nimport java.util.List;\n\n@Repository(\"userDAO\") \/\/ Spring taraf\u0131ndan y\u00f6netilen bir DAO bile\u015feni oldu\u011funu belirtir\npublic class UserDAOImpl implements UserDAO {\n\n    @Autowired\n    private SessionFactory sessionFactory; \/\/ Spring taraf\u0131ndan enjekte edilecek\n\n    private Session getCurrentSession() {\n        return sessionFactory.getCurrentSession(); \/\/ Mevcut transaction'a ba\u011fl\u0131 Session'\u0131 al\u0131r\n    }\n\n    @Override\n    public void saveUser(User user) {\n        getCurrentSession().save(user);\n    }\n\n    @Override\n    public User getUserById(Long id) {\n        return (User) getCurrentSession().get(User.class, id);\n    }\n\n    @Override\n    public List<User> getAllUsers() {\n        return getCurrentSession().createQuery(\"from User\").list();\n    }\n\n    @Override\n    public void updateUser(User user) {\n        getCurrentSession().update(user);\n    }\n\n    @Override\n    public void deleteUser(Long id) {\n        User user = getUserById(id);\n        if (user != null) {\n            getCurrentSession().delete(user);\n        }\n    }\n}<\/code><\/pre>\n<p>DAO bean tan\u0131m\u0131na art\u0131k gerek yoktur, \u00e7\u00fcnk\u00fc <code>@Repository<\/code> ve <code><context:component-scan><\/code> kullan\u0131yoruz.<\/p>\n<p>Servis katman\u0131 (<code>UserServiceImpl<\/code>) ve test kodu (<code>AppMain<\/code>) ayn\u0131 kal\u0131r, \u00e7\u00fcnk\u00fc DAO aray\u00fcz\u00fc de\u011fi\u015fmedi ve Spring&#8217;in <code>@Transactional<\/code> anotasyonu yine i\u015fini yapacakt\u0131r.<\/p>\n<h3>Spring Java Config ile Yap\u0131land\u0131rma \u00d6rne\u011fi<\/h3>\n<p>Spring 4 ile Java Config, XML yap\u0131land\u0131rmas\u0131na g\u00fc\u00e7l\u00fc bir alternatif haline geldi.<\/p>\n<pre><code class=\"language-java\">\/\/ com.example.config.AppConfig.java\npackage com.example.config;\n\nimport org.apache.commons.dbcp.BasicDataSource;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.ComponentScan;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.PropertySource;\nimport org.springframework.core.env.Environment;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.orm.hibernate4.HibernateTransactionManager;\nimport org.springframework.orm.hibernate4.LocalSessionFactoryBean;\nimport org.springframework.transaction.annotation.EnableTransactionManagement;\n\nimport javax.sql.DataSource;\nimport java.util.Properties;\n\n@Configuration \/\/ Bu s\u0131n\u0131f\u0131n bir Spring yap\u0131land\u0131rma s\u0131n\u0131f\u0131 oldu\u011funu belirtir\n@EnableTransactionManagement \/\/ @Transactional anotasyonunu etkinle\u015ftirir\n@ComponentScan(basePackages = \"com.example\") \/\/ com.example paketi alt\u0131ndaki bile\u015fenleri tarar\n@PropertySource(\"classpath:application.properties\") \/\/ Harici \u00f6zellikler dosyas\u0131n\u0131 y\u00fckler\npublic class AppConfig {\n\n    @Autowired\n    private Environment environment; \/\/ application.properties'den de\u011ferleri okumak i\u00e7in\n\n    @Bean\n    public DataSource dataSource() {\n        BasicDataSource dataSource = new BasicDataSource();\n        dataSource.setDriverClassName(environment.getRequiredProperty(\"jdbc.driverClassName\"));\n        dataSource.setUrl(environment.getRequiredProperty(\"jdbc.url\"));\n        dataSource.setUsername(environment.getRequiredProperty(\"jdbc.username\"));\n        dataSource.setPassword(environment.getRequiredProperty(\"jdbc.password\"));\n        return dataSource;\n    }\n\n    @Bean\n    public LocalSessionFactoryBean sessionFactory() {\n        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();\n        sessionFactory.setDataSource(dataSource());\n        sessionFactory.setPackagesToScan(\"com.example.model\"); \/\/ Varl\u0131k s\u0131n\u0131flar\u0131n\u0131 tarar\n        sessionFactory.setHibernateProperties(hibernateProperties());\n        return sessionFactory;\n    }\n\n    private Properties hibernateProperties() {\n        Properties properties = new Properties();\n        properties.put(\"hibernate.dialect\", environment.getRequiredProperty(\"hibernate.dialect\"));\n        properties.put(\"hibernate.show_sql\", environment.getRequiredProperty(\"hibernate.show_sql\"));\n        properties.put(\"hibernate.hbm2ddl.auto\", environment.getRequiredProperty(\"hibernate.hbm2ddl.auto\"));\n        properties.put(\"hibernate.current_session_context_class\", environment.getRequiredProperty(\"hibernate.current_session_context_class\"));\n        return properties;\n    }\n\n    @Bean\n    public HibernateTransactionManager transactionManager() {\n        HibernateTransactionManager transactionManager = new HibernateTransactionManager();\n        transactionManager.setSessionFactory(sessionFactory().getObject()); \/\/ getObject() \u00f6nemli!\n        return transactionManager;\n    }\n}<\/code><\/pre>\n<p><code>application.properties<\/code> dosyas\u0131 (<code>src\/main\/resources<\/code> alt\u0131nda):<\/p>\n<pre><code class=\"language-properties\">jdbc.driverClassName=com.mysql.cj.jdbc.Driver\njdbc.url=jdbc:mysql:\/\/localhost:3306\/mydb?useSSL=false&serverTimezone=UTC\njdbc.username=root\njdbc.password=password\n\nhibernate.dialect=org.hibernate.dialect.MySQL8Dialect\nhibernate.show_sql=true\nhibernate.hbm2ddl.auto=update\nhibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext<\/code><\/pre>\n<p>Ana uygulama s\u0131n\u0131f\u0131n\u0131 Java Config ile ba\u015flatmak i\u00e7in:<\/p>\n<pre><code class=\"language-java\">\/\/ com.example.main.AppMain.java (Java Config i\u00e7in)\npackage com.example.main;\n\nimport com.example.config.AppConfig;\nimport com.example.model.User;\nimport com.example.service.UserService;\nimport org.springframework.context.ApplicationContext;\nimport org.springframework.context.annotation.AnnotationConfigApplicationContext;\n\npublic class AppMain {\n    public static void main(String[] args) {\n        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);\n        UserService userService = context.getBean(UserService.class); \/\/ Tiple alma\n\n        \/\/ Ayn\u0131 test kodlar\u0131 burada da \u00e7al\u0131\u015facakt\u0131r\n        User user1 = new User();\n        user1.setUsername(\"jane.doe\");\n        user1.setEmail(\"jane.doe@example.com\");\n        userService.addUser(user1);\n        System.out.println(\"Added user: \" + user1);\n\n        User foundUser = userService.getUserById(user1.getId());\n        System.out.println(\"Found user: \" + foundUser);\n    }\n}<\/code><\/pre>\n<h2>Hibernate 5\/6 ve Spring 5\/6&#8217;ya Ge\u00e7i\u015fe K\u0131sa Bir Bak\u0131\u015f<\/h2>\n<p>Bu makale Spring 4 ve Hibernate 3\/4&#8217;e odaklansa da, teknolojilerin s\u00fcrekli geli\u015fti\u011fini belirtmek \u00f6nemlidir.<\/p>\n<p>*   <strong>Hibernate 5\/6:<\/strong> Hibernate&#8217;in sonraki s\u00fcr\u00fcmleri, JPA 2.1\/2.2 ve daha sonra Jakarta Persistence API (JPA 3.x) standartlar\u0131na daha s\u0131k\u0131 uyum sa\u011flad\u0131. <code>SessionFactory<\/code> olu\u015fturma mekanizmalar\u0131 ve API&#8217;lerinde k\u00fc\u00e7\u00fck iyile\u015ftirmeler oldu. \u00d6zellikle Hibernate 6 ile daha b\u00fcy\u00fck i\u00e7 mimari de\u011fi\u015fiklikler geldi.<br \/>\n*   <strong>Spring 5\/6:<\/strong> Spring Framework&#8217;\u00fcn sonraki s\u00fcr\u00fcmleri, Java 8+ \u00f6zelliklerini daha yo\u011fun kullanmaya ba\u015flad\u0131, reaktif programlama deste\u011fi ekledi ve Jakarta EE (\u00f6nceden Java EE) standartlar\u0131na uyum sa\u011flad\u0131.<\/p>\n<p>Spring&#8217;in <code>LocalSessionFactoryBean<\/code> (veya <code>LocalContainerEntityManagerFactoryBean<\/code> JPA kullan\u0131yorsan\u0131z) hala Hibernate ile entegrasyonun temel mekanizmas\u0131d\u0131r. Java Config, g\u00fcn\u00fcm\u00fczde neredeyse t\u00fcm yeni Spring projelerinde varsay\u0131lan yap\u0131land\u0131rma y\u00f6ntemi haline gelmi\u015ftir. Temel prensipler (DI, AOP, Transaction Management) de\u011fi\u015fmese de, API kullan\u0131mlar\u0131nda ve ba\u011f\u0131ml\u0131l\u0131klarda g\u00fcncel s\u00fcr\u00fcmlere g\u00f6re k\u00fc\u00e7\u00fck ayarlamalar gerekebilir.<\/p>\n<h2>S\u0131k\u00e7a Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h2>\n<p>Spring-Hibernate entegrasyonunda kar\u015f\u0131la\u015f\u0131labilecek baz\u0131 yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcmleri:<\/p>\n<h3>No Session found for current thread hatas\u0131<\/h3>\n<p>*   <strong>Neden:<\/strong> Bu hata genellikle bir Hibernate i\u015flemi (<code>Session<\/code>) ba\u015flat\u0131lmadan veya sonland\u0131r\u0131lmadan bir veritaban\u0131 i\u015flemine eri\u015fmeye \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131nda ortaya \u00e7\u0131kar. \u0130\u015flem y\u00f6netimi d\u00fczg\u00fcn yap\u0131land\u0131r\u0131lmam\u0131\u015ft\u0131r veya <code>@Transactional<\/code> anotasyonu eksiktir.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Servis katman\u0131n\u0131zdaki CRUD metodlar\u0131n\u0131 i\u00e7eren s\u0131n\u0131flara veya metodlara <code>@Transactional<\/code> anotasyonunu ekledi\u011finizden emin olun. Ayr\u0131ca, Spring yap\u0131land\u0131rman\u0131zda <code><tx:annotation-driven\/><\/code> (XML) veya <code>@EnableTransactionManagement<\/code> (Java Config) ile i\u015flem y\u00f6netiminin etkinle\u015ftirildi\u011finden emin olun.<\/p>\n<h3>LazyInitializationException<\/h3>\n<p>*   <strong>Neden:<\/strong> Hibernate, ili\u015fkili nesneleri varsay\u0131lan olarak &#8220;lazy&#8221; (tembel) y\u00fckler. Bir <code>Session<\/code> kapat\u0131ld\u0131ktan sonra lazy y\u00fcklenmi\u015f bir ili\u015fkiye eri\u015fmeye \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131nda bu hata meydana gelir.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n    *   \u0130\u015flem kapsam\u0131n\u0131 (transaction scope) geni\u015fletin, b\u00f6ylece ili\u015fkili nesnelere eri\u015fim de i\u015flem i\u00e7inde kal\u0131r.<br \/>\n    *   \u0130htiya\u00e7 duydu\u011funuz ili\u015fkili nesneleri <code>Eager<\/code> (hevesli) y\u00fckleme stratejisiyle (<code>@ManyToOne(fetch = FetchType.EAGER)<\/code>) y\u00fckleyin (performans etkileri olabilir).<br \/>\n    *   JPQL veya Criteria API kullanarak ili\u015fkili nesneleri <code>JOIN FETCH<\/code> ile sorguya dahil edin.<br \/>\n    *   DTO (Data Transfer Object) kullanarak sadece ihtiya\u00e7 duyulan verileri aktar\u0131n.<\/p>\n<h3>Veritaban\u0131 Ba\u011flant\u0131 Sorunlar\u0131<\/h3>\n<p>*   <strong>Neden:<\/strong> <code>jdbc.url<\/code>, <code>username<\/code>, <code>password<\/code> veya <code>driverClassName<\/code> gibi veritaban\u0131 ba\u011flant\u0131 \u00f6zelliklerinde yanl\u0131\u015fl\u0131klar. Veritaban\u0131 sunucusu \u00e7al\u0131\u015fm\u0131yor veya eri\u015filebilir de\u011fil.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Yap\u0131land\u0131rma dosyalar\u0131ndaki veya Java Config&#8217;deki veritaban\u0131 ba\u011flant\u0131 bilgilerini dikkatlice kontrol edin. Veritaban\u0131 sunucusunun \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan ve g\u00fcvenlik duvar\u0131 kurallar\u0131n\u0131n ba\u011flant\u0131ya izin verdi\u011finden emin olun. MySQL 8+ kullan\u0131yorsan\u0131z <code>com.mysql.cj.jdbc.Driver<\/code> s\u00fcr\u00fcc\u00fcs\u00fcn\u00fc kulland\u0131\u011f\u0131n\u0131zdan emin olun.<\/p>\n<h3>Hibernate Dialect Yanl\u0131\u015f Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>*   <strong>Neden:<\/strong> Kullan\u0131lan veritaban\u0131 t\u00fcr\u00fcne uygun olmayan bir <code>hibernate.dialect<\/code> \u00f6zelli\u011fi belirtmek. Bu, SQL sorgular\u0131n\u0131n yanl\u0131\u015f olu\u015fturulmas\u0131na veya belirli veritaban\u0131 \u00f6zelliklerinin kullan\u0131lamamas\u0131na neden olabilir.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>hibernate.dialect<\/code> \u00f6zelli\u011fini kulland\u0131\u011f\u0131n\u0131z veritaban\u0131 ve s\u00fcr\u00fcm\u00fcne uygun \u015fekilde ayarlay\u0131n (\u00f6rn. <code>org.hibernate.dialect.MySQL8Dialect<\/code>, <code>org.hibernate.dialect.PostgreSQLDialect<\/code>).<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Spring Framework ve Hibernate, Java ekosisteminde veri kal\u0131c\u0131l\u0131\u011f\u0131 ve i\u015f mant\u0131\u011f\u0131 y\u00f6netimi i\u00e7in vazge\u00e7ilmez iki teknolojidir. Bu makalede, Spring 4&#8217;\u00fcn g\u00fc\u00e7l\u00fc yeteneklerini kullanarak hem Hibernate 3 hem de Hibernate 4 ile nas\u0131l entegrasyon sa\u011flanaca\u011f\u0131n\u0131 ayr\u0131nt\u0131l\u0131 bir \u015fekilde inceledik. Hibernate 3&#8217;\u00fcn <code>HibernateTemplate<\/code> yakla\u015f\u0131m\u0131ndan, Hibernate 4&#8217;\u00fcn native <code>Session<\/code> API&#8217;sine ge\u00e7i\u015fi ve Spring&#8217;in XML tabanl\u0131 yap\u0131land\u0131rmadan Java Config&#8217;e evrimini g\u00f6rd\u00fck.<\/p>\n<p>Bu entegrasyon, geli\u015ftiricilere deklaratif i\u015flem y\u00f6netimi, basitle\u015ftirilmi\u015f veri eri\u015fim katman\u0131 ve tutarl\u0131 istisna y\u00f6netimi gibi \u00f6nemli avantajlar sunar. Spring&#8217;in IoC\/DI prensipleri sayesinde, Hibernate <code>SessionFactory<\/code> gibi karma\u015f\u0131k bile\u015fenlerin ya\u015fam d\u00f6ng\u00fcs\u00fc ve ba\u011f\u0131ml\u0131l\u0131klar\u0131 kolayca y\u00f6netilebilir hale gelir.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz modern uygulamalar\u0131nda Java Config, daha okunabilir ve tip-g\u00fcvenli bir yap\u0131land\u0131rma y\u00f6ntemi olarak \u00f6ne \u00e7\u0131kmaktad\u0131r. Ancak, XML tabanl\u0131 yap\u0131land\u0131rma da hala bir\u00e7ok projede kullan\u0131lmaktad\u0131r ve bu makalede her iki yakla\u015f\u0131m da ele al\u0131nm\u0131\u015ft\u0131r.<\/p>\n<p>Spring ve Hibernate&#8217;in birlikte kullan\u0131lmas\u0131, veritaban\u0131 i\u015flemlerini daha verimli, daha az hataya a\u00e7\u0131k ve daha s\u00fcrd\u00fcr\u00fclebilir hale getirerek kurumsal d\u00fczeyde uygulamalar\u0131n geli\u015ftirilmesini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde kolayla\u015ft\u0131r\u0131r. Bu rehber, entegrasyonun temel prensiplerini anlaman\u0131z ve kendi projelerinizde uygulaman\u0131z i\u00e7in sa\u011flam bir temel sa\u011flam\u0131\u015ft\u0131r. Gelecekteki Spring ve Hibernate s\u00fcr\u00fcmleriyle birlikte bu entegrasyonun daha da geli\u015ferek devam edece\u011fi \u015f\u00fcphesizdir.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Spring Hibernate Entegrasyonu \u00d6rne\u011fi: Spring 4, Hibernate 3 ve Hibernate 4 ile Ad\u0131m Ad\u0131m Rehber\nGiri\u015f\nModern kurumsal uygulamalar\u0131n geli\u015ftir","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-34003","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Spring Hibernate Entegrasyonu \u00d6rne\u011fi: Spring 4, Hibernate 3 ve Hibernate 4 ile Ad\u0131m Ad\u0131m Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Hibernate Entegrasyonu \u00d6rne\u011fi: Spring 4, Hibernate 3 ve Hibernate 4 ile Ad\u0131m Ad\u0131m Rehber\" \/>\n<meta property=\"og:description\" content=\"Spring Hibernate Entegrasyonu \u00d6rne\u011fi: Spring 4, Hibernate 3 ve Hibernate 4 ile Ad\u0131m Ad\u0131m Rehber Giri\u015f Modern kurumsal uygulamalar\u0131n geli\u015ftir\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-09T18:40:57+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Spring Hibernate Entegrasyonu \u00d6rne\u011fi: Spring 4, Hibernate 3 ve Hibernate 4 ile Ad\u0131m Ad\u0131m Rehber\",\"datePublished\":\"2025-11-09T18:40:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/\"},\"wordCount\":2378,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/\",\"name\":\"Spring Hibernate Entegrasyonu \u00d6rne\u011fi: Spring 4, Hibernate 3 ve Hibernate 4 ile Ad\u0131m Ad\u0131m Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-09T18:40:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spring Hibernate Entegrasyonu \u00d6rne\u011fi: Spring 4, Hibernate 3 ve Hibernate 4 ile Ad\u0131m Ad\u0131m Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Spring Hibernate Entegrasyonu \u00d6rne\u011fi: Spring 4, Hibernate 3 ve Hibernate 4 ile Ad\u0131m Ad\u0131m Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Spring Hibernate Entegrasyonu \u00d6rne\u011fi: Spring 4, Hibernate 3 ve Hibernate 4 ile Ad\u0131m Ad\u0131m Rehber","og_description":"Spring Hibernate Entegrasyonu \u00d6rne\u011fi: Spring 4, Hibernate 3 ve Hibernate 4 ile Ad\u0131m Ad\u0131m Rehber Giri\u015f Modern kurumsal uygulamalar\u0131n geli\u015ftir","og_url":"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-09T18:40:57+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Spring Hibernate Entegrasyonu \u00d6rne\u011fi: Spring 4, Hibernate 3 ve Hibernate 4 ile Ad\u0131m Ad\u0131m Rehber","datePublished":"2025-11-09T18:40:57+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/"},"wordCount":2378,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/","name":"Spring Hibernate Entegrasyonu \u00d6rne\u011fi: Spring 4, Hibernate 3 ve Hibernate 4 ile Ad\u0131m Ad\u0131m Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-09T18:40:57+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/spring-hibernate-entegrasyonu-ornegi-spring-4-hibernate-3-ve-hibernate-4-ile-adim-adim-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Spring Hibernate Entegrasyonu \u00d6rne\u011fi: Spring 4, Hibernate 3 ve Hibernate 4 ile Ad\u0131m Ad\u0131m Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34003","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=34003"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34003\/revisions"}],"predecessor-version":[{"id":34004,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34003\/revisions\/34004"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34003"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34003"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34003"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}