17 Temmuz 2018 Salı

@TypeDefs Anotasyonu

Giriş
Birden fazla @TypeDef anotasyonu tanımlamak için kullanılır. Bu anotasyon yerine JPA 2.1 ile gelen anotasyonlar kullanılmalı.

Örnek
Şöyle yaparız.
@Entity()
@Table(name = "plan_capacities")
@TypeDefs(
        TypeDef(name = "int-array", typeClass = IntArrayType::class)
)
data class PlanCapacity(
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        val id: Int,

        @ManyToOne
        @JoinColumn(name = "line_Id")
        val line: Line,

        @ManyToOne()
        @JoinColumn(name = "model_Id")
        val model: Model,

        @JsonBackReference
        @ManyToOne()
        @JoinColumn(name = "plan_id")
        val plan: Plan,

        @Column(name = "capacity")
        @Type(type = "int-array")
        val capacity: IntArray
) {
  

16 Temmuz 2018 Pazartesi

@Type Anotasyonu

Örnek
Joda DateTime için şöyle yaparız
import org.joda.DateTime;
@Type (type=org.jadira.usertype.dateandtime.joda.PersistentDateTime)
private DateTime  dateTime
Örnek
Hibernate 5 ile bu tip otomatik olarak yaratılıyor.
public class PostgreSQLDialect extends PostgreSQL91Dialect {

  public PostgreSQL92Dialect() {
    super();
    this.registerColumnType( Types.JAVA_OBJECT, "json" );
  }
}
Şöyle yaparız.
@Type( type = "json" )
@Column( columnDefinition = "json" )

@Where Anotasyonu

Giriş
Şu satırı dahil ederiz.
import org.hibernate.annotations.Where;
@SQLDelete ile birlikte "Soft Delete" için kullanılabilir.

clause Alanı
Örnek
Şöyle yaparız
@Where(clause = " IS_DELETED = false")
public Entity {
  
  @Column(name = "IS_DELETED")
  private boolean isDeleted;
  ...
}
Örnek
Şöyle yaparız.
/ ...
@Where(clause = "VALID_TO <= GETDATE()")
class Privilege {
    // ...
}

@SQLDelete Anotasyonu

Giriş
@Where ile birlikte "Soft Delete" için kullanılır.

Örnek
Şöyle yaparız.
@Entity
@Table(name = "Events")
@SQLDelete(sql ="UPDATE events SET IS_DELETED = true WHERE id = ?")
public class Event extends BaseEntity {
  ...
}

11 Temmuz 2018 Çarşamba

DetachedCriteria Sınıfı

add metodu
Şöyle yaparız.
DetachedCriteria criteria = (DetachedCriteria) DetachedCriteria.forClass(Foo.class)
            .add(Restrictions.eq("vid", vid))
getExecutableCriteria metodu
Criteria tipi döner.
Örnek
Şöyle yaparız.
DetachedCriteria detached = ...;
Session session = ...;
Criteria criteria = detached.getExecutableCriteria(session);
setProjection metodu
Select edilecek sütunlaru belirtir. Şöyle yaparız.
Criteria cr = DetachedCriteria.forClass(User.class)
    .setProjection(Projections.projectionList()
      .add(Projections.property("id"), "id")
      .add(Projections.property("Name"), "Name"))
    .setResultTransformer(Transformers.aliasToBean(User.class))
    .getExecutableCriteria(session);

Oracle8iDialect Sınıfı

Giriş
Şu satırı dahil ederiz.
import org.hibernate.dialect.Oracle8iDialect;
registerColumnType metodu
İçi şöyledir.
registerColumnType( Types.LONGVARBINARY, "long raw" );