Aşağıdaki haritalamada neyin yanlış olduğunu anlamaya çalışıyorum. Aşağıdaki eşlemenin ORM için ideal olmadığını anlıyorum, ancak veritabanı böyle ve yapısını değiştiremiyorum. JPA 2.1 ve Hibernate 5.0.2.Final kullanıyorum.Birleşik Anahtarda JoinColumns kullanıldığında yanlış TypeDescriptor
@MappedSuperclass
public abstract class BaseEntity<T extends Serializable> implements Serializable {
protected T id;
@Id
public T getId() {
return id;
}
protected void setId(T id) {
this.id = id;
}
}
@Table(name = "campaign")
@AttributeOverride(name = "id", column = @Column(name = "campaign_id"))
public class Campaign extends BaseEntity<String> {
// attributes, getters and setters
}
@Embeddable
public class CampaignBroadcastPK implements Serializable {
@ManyToOne
@JoinColumn(name = "campaign_id", insertable = false, updatable = false)
private Campaign campaign;
@Column(name = "broadcast_date")
private LocalDate broadcastDate;
// getters and setters
}
@Entity
@Table(name = "campaign_broadcast")
public class CampaignBroadcast implements Serializable {
@EmbeddedId
private CampaignBroadcastPK id;
// attributes, getters and setters
}
@Embeddable
public class CampaignBroadcastProcessPK implements Serializable {
@ManyToOne
@JoinColumns({
@JoinColumn(name = "campaign_id", insertable = false, updatable = false),
@JoinColumn(name = "broadcast_date", insertable = false, updatable = false)
})
private CampaignBroadcast broadcast;
@Column(name = "process_date)
private LocalDate processDate;
// getters and setters
}
@Entity
@Table(name = "campaign_broadcast_process")
public class CampaignBroadcastProcess implements Serializable {
@EmbeddedId
private CampaignBroadcastProcessPK id;
// attributes, getters and setters
}
bu yapının Ayrıca, ben de autoApply=true
ile açıklamalı java.sql.Date
e LOCALDATE işlemek için bir dönüştürücü var. valueOf
geçirilen dize geçerli bir tarih dize olmadığından
Ben, bir IllegalStateException
atmak için java.sql.Date
neden bir dize olarak eşlenmiş halde, entityManager.find()
aracılığıyla CampaignBroadcastProcess
yük Tarihi campaign_id
dönüştürmek için çalışır hazırda bekletme çalıştığınızda.
Şüpheli Hazırda bekletme, her ikisi de bir LocalDate öğesiyle işleyerek, CampaignBroadcastProcessPK
'da JoinColumns türlerini karıştırıyor.
Bu sorunla karşılaştı mı?
Üyelik eşledikten ilk veri türü aldı çünkü bu olduğunu düşünüyorum - örtük eşleştirmesini misordered. –
no'lu ek açıklamalardan gelen örtük sıralamaya güvenmek yerine, açık bağlayıcıları kullanmayı düşünün, bu durum geçerli değildir, çünkü başvurulanColumnName ile eşleşme çalışmadı. – renke