İçerikler :

@Column @Entity @JoinColumn @MappedSuperclass @Table Apache OpenJPA Provider Basic Mapping Basit Bidirectional Relationship Örneği Bir Entity Sınıfının Normal Bir Sınıftan Türe.. DataNucleus Provider EclipseLink Provider Entity Entity Listesi Olmayan Select Sonucunu Almak Generics Bir Parametrenin Sınıfının Alınması Hibernate Provider HSQLDB ile JPA Örneği JPA'da @MappedSuperclass Annotation İle İlgil.. JPA'da Entity Sınıflarını Normal Bir Sınıftan.. JPA'da Ortak Özellikleri Super Entity Sınıfın.. JPA (Java Persistence API-Java Kalıcılık API) JPA Provider Not Found On Type org.hibernate.collection.Pe.. ObjectDB Provider org.hibernate.boot.archive.spi.ArchiveExcepti.. Önemli Annotation Listesi Persistence Bilgileri Map Olarak Veren Bir Ör.. Relationship Field ToplLink Provider

Bu Sayfayı Paylaş:

Kavram

JPA (Java Persistence API-Java Kalıcılık API)

Tanım: Javada bir Object Relation Mapping (ilişkisel veritabanı ile nesneler arasında eşlemeyi sağlayan teknoloji) standartı

Kavram

Entity

Tanım: JPA'da, veritabanında nasıl saklanacağı tanımlanmış java sınıfı. Örneğin bir sınıf bir tabloya karşılık gelebilir. Tablonun sütunları ile sınıfın değişkenleri veya methodları eşleştirilebilir. Bir entity sınıfı , @Entity ile tanımlanmalı ve en az bir id alanı @Id ile işaretlenmesi gerekir.

Kavram

@Entity

Tanım: JPA'da bir sınıfı entity haline getirmek için kullanılan annotation.

Kavram

Basic Mapping

Tanım: Bir entity alanının (field) basit bir veritabanı tipine eşleştirilmesi. Veritabanı sütun tipleri ile javadaki tiplerin eşleşmesidir.

Kavram

@Table

Tanım: Bir entity sınıfının veritabanındaki tablo bilgilerini vermek için kullanılan annotatiton. Örneğin @Table(name="Order") şeklinde entity sınıfın tablo adı verilebilir.

Kavram

@Column

Tanım: Bir entity sınıfın bir alanının veritabanındaki eşleştiği sütun hakkında bilgi vermek için kullanılan annotation. Örneğin @Column(name='ID') ile bir alanın sütunun adı verilebilir.

Kavram

Relationship Field

Tanım: Bir entity sınıfında, veritabanında foreing key ile bağlı olduğu diğer bir entity'i gösteren field.

Kavram

@JoinColumn

Tanım: Bir entity içinde relation alanında join hakkında bilgi vermek için kullanılır.

Kavram

@MappedSuperclass

Tanım: JPA'da bir class'ın(sınıf) özelliklerinin (property) , kendisinden türeyen (extend eden) entity class'larında geçerli olmasını sağlamak için class'a eklenen annotation (notlama). Bu özellik sayesinde farklı entity class'larında ortak olan özellikler üst bir class'ta tanımlanabilmektedir. @MappedSuperclass ile tanımlanan class bir entity class'ı değildir ve veritabanında bir tablo ile eşlemesi bulunmaz

Veri

Önemli Annotation Listesi

JPA da kullanılan önemli annotation'lar aşağıdaki gibidir :
  • Mapping-Eşleme
    • @Basic
    • @Embedded
    • @EmbeddedId
    • @Enumerated
    • @Lob
    • @Temporal
    • @OneToOn
    • @OneToMany
    • @ManyToOne
    • @ManyToMany
    • @Transient
  • Veritabanı İle İlgili Bilgi
    • @Table
    • @TableGenerator
    • @Column
    • @DiscriminatorColumn
    • @AttributeOverride(s)
    • @AssociationOverride(s)
    • @JoinColumn
    • @JoinTable
    • @PrimaryKeyJoinColumn(s)
    • @SecondaryTable(s)
    • @SequenceGenerator
  • Davranış-Model
    • @Entity
    • @Id
    • @IdClass
    • @GeneratedValue
    • @MappedSuperclass
    • @Embeddable
    • @Inheritance
    • @OrderBy
    • @DiscriminatorValue
    • @Version
    • @MapKey


Örnek

JPA'da @MappedSuperclass Annotation İle İlgili JavaDoc İçinde Verilen Örnek

JavaDoc içinde @MappedSuperclass Annotation'ı ile ilgili verilen örnek aşağıdaki gibidir :
@MappedSuperclass
public class Employee {
	@Id protected Integer empId;
	@Version protected Integer version;
	@ManyToOne @JoinColumn(name="ADDR")
	protected Address address;
	public Integer getEmpId() { ... }
	public void setEmpId(Integer id) { ... }
	public Address getAddress() { ... }
	public void setAddress(Address addr) { ... }
}
Employee entity'ler için bir super class'dır. Aşağıda Employee'den türeyen iki entity class'î görülmektedir :
@Entity
public class FTEmployee extends Employee {
	// Inherited empId field mapped to FTEMPLOYEE.EMPID
	// Inherited version field mapped to FTEMPLOYEE.VERSION
	// Inherited address field mapped to FTEMPLOYEE.ADDR fk
	// Defaults to FTEMPLOYEE.SALARY
	protected Integer salary;
	public FTEmployee() {}
	public Integer getSalary() { ... }
	public void setSalary(Integer salary) { ... }
}
@Entity @Table(name="PT_EMP")
@AssociationOverride(name="address",
joincolumns=@JoinColumn(name="ADDR_ID"))
public class PartTimeEmployee extends Employee {
	// Inherited empId field mapped to PT_EMP.EMPID
	// Inherited version field mapped to PT_EMP.VERSION
	// address field mapping overridden to PT_EMP.ADDR_ID fk
	
	@Column(name="WAGE")
	protected Float hourlyWage;
	public PartTimeEmployee() {}
	public Float getHourlyWage() { ... }
	public void setHourlyWage(Float wage) { ... }
	
}

Örnek

Bir Entity Sınıfının Normal Bir Sınıftan Türemesini Gösteren JavaDoc İçindeki Örnek

Javadoc içinde, bir entity sınıfının normal bir sınıftan türemesini gösteren örnek aşağıdaki gibidir :
public class Cart {
	// This state is transient
	Integer operationCount;
	public Cart() { operationCount = 0; }
	public Integer getOperationCount() { return operationCount; }
	public void incrementOperationCount() { operationCount++; }
}
Yukarıdaki normal sınıfı extend eden Entity sınıfı :
@Entity
public class ShoppingCart extends Cart {
	Collection items = new Vector();
	public ShoppingCart() { super(); }
	@OneToMany
	public Collection getItems() { return items; }
	public void addItem(Item item) {
		items.add(item);
		incrementOperationCount();
	}
}

ShoppingCart entity'si Cart sınıfı extend etmiştir.

İpucu

Entity Listesi Olmayan Select Sonucunu Almak

Eğer bir sorgu sonucu entity listesine karşılık gelmiyor ise yeni bir class yaratıp select sorgusunda bu class'ı kullanabilirsiniz. Örneğin select memberid,count(*) from message group by memberid gibi bir sorgu sonucu bir id ve bir sayıdan oluşan bir liste dönmektedir. Sonuç bir entity listesi olmadığı için aşağıdaki gibi bir class yaratabilirsiniz :
class MessageCount{
	Long memberId;
	Long count;
	public MessageCount(Long memberId,Long count){
		setMemberId(memberId);
		setCount(count);
	}
	// set ve get aşağıda....
	...
}
Ve select sorgusunu aşağıdaki gibi yazabilirsiniz :
select new MessageCount(m.memberid,count(m.memberid)) from Message m group by m.memberid;
Ve bu sorgu sonucunu aşağıdaki gibi alabilirsiniz :
String query="select new MessageCount(m.memberid,
  count(m.memberid)) from Message m group by m.memberid;";
Query query=getEntityManager().createQuery(query); 
List list=query.getResultList();

İpucu

Not Found On Type org.hibernate.collection.PersistentSet Hatasının Çözümü

JSF bir data componentinin (datatable,repeater vb..) value alanına bir JPA entity'sinin Set tipinde bir özelliğini verirseniz aşağıdaki exception oluşur :
not found on type org.hibernate.collection.PersistentSet
Bu sorunu çözmek için data componentine (datatable,repeater vb..) Set yerine List tipi verilmelidir. Bunun için entity'ye aşağıdaki gibi bir fonksiyon eklenebilir :
@Transient
public List geXAsList() {
 List list = new ArrayList(X);
 return list;
}

Yukarıda X tipinde bir Set bulunduran entity'de List olarak döndüren method görülmektedir

İpucu

JPA'da Ortak Özellikleri Super Entity Sınıfına Alabilirsiniz

Bir JPA projesinde Entity sınıflarınızda orta özellikler var ise (Örneğin yaratılma tarihi, id vb..) bu özellikleri her Entity class'ına ayrı olarak yazmak yerine super bir class'a yazabilirsiniz. Bunu yapmak için super class aşağıdaki gibi tanımlanmalıdır :
@MappedSuperclass
public class BaseEntity{
 @Temporal(TemporalType.TIMESTAMP)
 @Column(name = "creation_date")
 private Calendar creationDate;
}
Yukarıdaki örnekte yaratılma tarihi özelliği genel bir özellik gibi tanımlanmıştır. Aşağıda bu class'ı extend eden entity class'ı görülmektedir:
@Entity
public class Test extends BaseEntity {
 @Column(name = "name")
 private String name;
}

Yukarıda yaratılan Test entity class'ı için veritabanında tablo yaratıldığında hem name sütunu hem de creation_date sütunu olacaktır.

İpucu

JPA'da Entity Sınıflarını Normal Bir Sınıftan Türetebilirsiniz

JPA'da Entity sınıflarını normal bir sınıftan (POJO sınıfı) türetebilirsiniz. Farklı entity class'larında ortak bazı özellikleri (veritabanı eşleştirme ile ilgili olmayan) normal bir java sınıfında toplayabilirsiniz. Aşağıdaki gibi yapı kurulabilmektedir :
public class EntityBase{
 ...
}
@Entity
public class Entity1 extend EntityBase{
}
@Entity
public class Entity2 extend EntityBase{
}

Örnek

Basit Bidirectional Relationship Örneği

Bidirection relationship (iki yönlü ilişki) örneği aşağıdaki gibidir :
class A{
	@ManyToOne 
	@JoinColumn(name="b_id") 
	B b;
}
class B{
	@OneToMany(mappedBy="b") 
	List aList;
}

Yukarıdaki örnek A sınıfı, B den bir veya daha fazla bulundurabilir. Örneğin bir siparişin maddeleri, bir kişinin evcil hayvanları vb... Bu nedenle B deki ilişki tipi @OneToMany iken (yani B birden fazla A sı olabilir), A deki ilişki tipi @ManyToOne (yani A sadece bir B si olur). B sınıfında mappedBy ile A sınıfı içindeki b ilişkisine referans vermektedir

Kavram

JPA Provider

Tanım: JPA spesifikasyonlarını implement eden kütüphane veya proje. JPA spesifikasyondur ve kendi başına kullanılamaz. Kullanılabilmesi için JPA gerekliliklerini yerine getiren bir kütüphane gerekmektedir. En yaygın kullanılan provider'lar Hibernate, EclipseLink , Toplink, OpenJPA , DataNucleus provider'larıdır.

Kavram

Hibernate Provider

Tanım: Hibernate ürünü geliştiricileri tarafından yaratılan bir JPA provider

Kavram

ToplLink Provider

Tanım: Oracle'ın basit bir JPA provider'ı

Kavram

EclipseLink Provider

Tanım: Toplink temelli bir JPA provider'ı.

Kavram

Apache OpenJPA Provider

Tanım: Apache kurumuna ait bir JPA provider'ı

Kavram

DataNucleus Provider

Tanım: Bir JPA ve JDO provider'ı

Kavram

ObjectDB Provider

Tanım: Bir JPA provider'ı

Örnek

HSQLDB ile JPA Örneği

Memory'de çalışan bir veritabanı olan HSQLDB'e JPA ile erişebilir ve kullanabilirsiniz.
Öncelikle JPA provider olarak Hibernate ve HSQLDB için driver ekliyoruz :
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
              <groupId>org.hibernate</groupId>
              <artifactId>hibernate-core</artifactId>
              <version>5.2.6.Final</version>
</dependency>
 
<!-- https://mvnrepository.com/artifact/org.hsqldb/hsqldb -->
<dependency>
              <groupId>org.hsqldb</groupId>
              <artifactId>hsqldb</artifactId>
              <version>2.3.4</version>
</dependency>
persistence.xml aşağıdaki gibi olacak:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
	xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
	<persistence-unit name="TestJPA"
		transaction-type="RESOURCE_LOCAL">
		<description>JPA Test</description>
		<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
		<class>com.test.entity.Test</class>
		<properties>
					  <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
					  <property name="hibernate.hbm2ddl.auto" value="create-drop" />
					  <property name="hibernate.show_sql" value="true" />
					  <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver" />
					  <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:unittests" />
					  <property name="javax.persistence.jdbc.user" value="sa" />
					  <property name="javax.persistence.jdbc.password" value="" />
		</properties>
	</persistence-unit>
</persistence>
Artık JPA ile veritabanına erişebiliriz. Aşağıdaki gibi test edilebilir :
EntityManagerFactory entityManagerFactory=
	Persistence.createEntityManagerFactory("TestJPA",map);         
EntityManager entityManager=entityManagerFactory.createEntityManager();
Test t=new Test();
t.setId(1);
t.setName("Ali");
entityManager.getTransaction().begin();
entityManager.persist(t);
entityManager.getTransaction().commit();
entityManager.close();
entityManagerFactory.close();

Örnek

Persistence Bilgileri Map Olarak Veren Bir Örnek

persistence.xml içindeki özellikleri programatik olarak verebilirsiniz :
Map map = new HashMap();    
map.put("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
map.put("hibernate.hbm2ddl.auto", "create-drop");
map.put("hibernate.show_sql", "true");
map.put("javax.persistence.jdbc.driver", "org.hsqldb.jdbcDriver");
map.put("javax.persistence.jdbc.url", "jdbc:hsqldb:mem:unittests");
map.put("javax.persistence.jdbc.user", "sa");
map.put("javax.persistence.jdbc.password", "sa");

EntityManagerFactory entityManagerFactory=
	Persistence.createEntityManagerFactory("TestJPA",map);
		   
EntityManager entityManager=entityManagerFactory.createEntityManager();

Test t=new Test();
t.setId(1);
t.setName("Ali");

entityManager.getTransaction().begin();

entityManager.persist(t);

entityManager.getTransaction().commit();

entityManager.close();
		   
entityManagerFactory.close();
Bu örnekte persistence.xml aşağıdaki gibi olması yeterlidir:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
              xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
              <persistence-unit name="TestJPA"
                            transaction-type="RESOURCE_LOCAL">
                            <description>JPA Test</description>
                            <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
                            <class>com.test.entity.Test</class>
              </persistence-unit>
</persistence>
provider ve transactipon type de eklenebilir :
 
map.put("javax.persistence.provider", "org.hibernate.jpa.HibernatePersistenceProvider");
map.put("javax.persistence.transactionType", "RESOURCE_LOCAL");
ve persistence.xml sadece aşağıdaki gibi olabilir:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
	xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
	<persistence-unit name="TestJPA">
		<class>com.test.entity.Test</class>
	</persistence-unit>
</persistence>

İpucu

Generics Bir Parametrenin Sınıfının Alınması

Generic bir sınıf yaptığınızda , generic verilen parametrenin sınıfına ihtiyacınız olabilir. Normal durumda metot içinde verilen parametrenin sınıfını bulamazsınız. Örneğin JPA için genel bir data access sınıfı aşağıdaki gibi olsun :


import javax.persistence.EntityManager;
import javax.persistence.Persistence;
 
public class GenericDao<T,PK> {
             
	private EntityManager entityManager;
	public GenericDao() {
			   
		entityManager = Persistence.createEntityManagerFactory("TestJPA").createEntityManager();
			   
	}
	public Test find(Long id) {
		return entityManager.find(entityClass, id); // hata
	}
	public void create(Test t) {
		entityManager.persist(t);
	}
	public void update(Test t) {
		entityManager.merge(t);
	}
	public void delete(Test t) {
		entityManager.remove(t);
	}
 
}
Yukarıdaki kod derlenemez. entityManager.find(entityClass, id) satırında T'nin sınıfı gerekmektedir. Generic bir değişkenin sınıfını o anda alamazsınız. T'nin sınıfını almak için T sınıfı için kurucuda bir Class değişkeni yaratılabilir ve aşağıdaki gibi yaratılabilir :
import java.lang.reflect.ParameterizedType;
 
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
 
public class GenericDao<T, PK> {
 
	private EntityManager entityManager;
	protected Class<T> entityClass;
	public GenericDao() {
		entityManager = Persistence.createEntityManagerFactory("TestJPA").createEntityManager();
		ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
		entityClass = (Class<T>) genericSuperclass.getActualTypeArguments()[0];
	}
	public T find(Long id) {
		return entityManager.find(entityClass, id); // hata
	}
	public void create(T t) {
		entityManager.persist(t);
	}
	public void update(T t) {
		entityManager.merge(t);
	}
	public void delete(T t) {
		entityManager.remove(t);
	}
 
}
Görüldüğü gibi kurucuda
ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
 
entityClass = (Class<T>) genericSuperclass.getActualTypeArguments()[0];


ile T argümanın sınıfı tespit edilmiştir. Bu şekilde find metodunda kullanılabilir.

İpucu

org.hibernate.boot.archive.spi.ArchiveException: Could not build ClassFile Hatası

JPA ve Hibernate kullandığınız bir projeyi test veya production ortamına attığınız aşağıdaki gibi bir hata oluşabilir:
org.hibernate.boot.archive.spi.ArchiveException: Could not build ClassFile
at org.hibernate.boot.archive.scan.spi.ClassFileArchiveEntryHandler.toClassFile(ClassFileArchiveEntryHandler.java:64) ~[scheduler-0.0.1-SNAPSHOT.jar:?]
at org.hibernate.boot.archive.scan.spi.ClassFileArchiveEntryHandler.handleEntry(ClassFileArchiveEntryHandler.java:47) ~[scheduler-0.0.1-SNAPSHOT.jar:?]
at org.hibernate.boot.archive.internal.JarFileBasedArchiveDescriptor.visitArchive(JarFileBasedArchiveDescriptor.java:152) ~[scheduler-0.0.1-SNAPSHOT.jar:?]
at org.hibernate.boot.archive.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.java:47) ~[scheduler-0.0.1-SNAPSHOT.jar:?]
at org.hibernate.boot.model.process.internal.ScanningCoordinator.coordinateScan(ScanningCoordinator.java:75) ~[scheduler-0.0.1-SNAPSHOT.jar:?]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.prepare(MetadataBuildingProcess.java:98) ~[scheduler-0.0.1-SNAPSHOT.jar:?]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.(EntityManagerFactoryBuilderImpl.java:199) ~[scheduler-0.0.1-SNAPSHOT.jar:?]
at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:34) ~[scheduler-0.0.1-SNAPSHOT.jar:?]
at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:165) ~[scheduler-0.0.1-SNAPSHOT.jar:?]
at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:114) ~[scheduler-0.0.1-SNAPSHOT.jar:?]
at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:71) ~[scheduler-0.0.1-SNAPSHOT.jar:?]
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:52) [scheduler-0.0.1-SNAPSHOT.jar:?]
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) [scheduler-0.0.1-SNAPSHOT.jar:?]
..
javax.persistence.PersistenceException: Unable to build entity manager factory
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:66)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
..  
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: org.hibernate.boot.archive.spi.ArchiveException: Could not build ClassFile
at org.hibernate.boot.archive.scan.spi.ClassFileArchiveEntryHandler.toClassFile(ClassFileArchiveEntryHandler.java:64)
at org.hibernate.boot.archive.scan.spi.ClassFileArchiveEntryHandler.handleEntry(ClassFileArchiveEntryHandler.java:47)
at org.hibernate.boot.archive.internal.JarFileBasedArchiveDescriptor.visitArchive(JarFileBasedArchiveDescriptor.java:152)
at org.hibernate.boot.archive.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.java:47)
at org.hibernate.boot.model.process.internal.ScanningCoordinator.coordinateScan(ScanningCoordinator.java:75)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.prepare(MetadataBuildingProcess.java:98)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.(EntityManagerFactoryBuilderImpl.java:199)
at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:34)
at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:165)
at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:114)
at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:71)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:52)
bu hatayı çözmek için javassist projesinin son versiyonuna geçmeniz gerekebilir:

<dependency>
	<groupId>org.javassist</groupId>
	<artifactId>javassist</artifactId>
	<version>3.25.0-GA</version>
</dependency>


Bu işlemi yaptığınızda sorun büyük ihtimalle çözülecektir.



Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir