Giriş
Şu satırı dahil ederiz.
Composite primary key tanımlamak için 3 yöntem var. İlk yöntem en kolayı.
Örnek
Şöyle bir tablomuz olsun.
Şu satırı dahil ederiz.
import javax.persistence.Id;
Sınıfın @Id ile işaretli birden fazla alanı varsa yani composite primary key varsa kullanılabilir.Composite primary key tanımlamak için 3 yöntem var. İlk yöntem en kolayı.
1. Mark it as @Embeddable and add to your entity class a normal property for it, marked with @Id.PrimaryKey olarak tanımlanan yeni sınıf şu özelliklere sahip olmalı. En önemlisi Serializable olması ve equals() + hashCode() metodlarını gerçekleştirmesi
2. Add to your entity class a normal property for it, marked with @EmbeddedId.
3. Add properties to your entity class for all of its fields, mark them with @Id,and mark your entity class with @IdClass, supplying the class of your primary key class.
- It is a POJO class.Örnek
- It is a public class with a public no-argument constructor.
- If you use property-based access, the properties of the primary key class are public or protected.
- It is serializable.
- It defines equals and hashCode methods. The semantics of value equality for these methods must be consistent with the database equality for the database types to which the key is mapped.
- Its fields or properties must correspond in type and name to the entity primary key fields or properties annotated with @Id.
- An instance of the IdClass is used with the EntityManager find() operation, to find an entity by its id.
Şöyle yaparız.
public class SamplesKey implements Serializable {
private Integer id;
private int year;
...
}
@Entity
@IdClass(EmbedddedSamplesKey.class)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Samplings {
@Id
@GeneratedValue
private Integer id;
@Id
private int year;
...
}
Şöyle bir tablomuz olsun.
detail
primary key (master_id, name) name string
...
Sınıfımızın PK anlarını göz önüne alarak şöyle kodlarız.@Entity
@Table(name = "detail")
@IdClass(DetailIdPk.class)
class Detail {
@Id
int master;
@Id
String name;
}
@IdClass olarak belirtilmiş sınıfımızı şöyle kodlarız.class DetailIdPK implements Serializable {
int master;
String name;
}
Hiç yorum yok:
Yorum Gönder