![](/img/trans.png)
[英]Hibernate ORA-00932: inconsistent datatypes: expected NUMBER got BINARY
[英]LocalDate to Date Conversion Problem in Hibernate: ORA-00932: inconsistent data types: should be: NUMBER received: BINARY
我在 Hibernate 項目中遇到錯誤。有一個Kisi class。 這是我項目的 class 結構:
Kisi實體:
@Entity
@Table(name = "KISI" )
public class Kisi implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 3283201458992402052L;
@Id
@Column(name = "ANAHTAR")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "kisi_Sequence")
@SequenceGenerator(name = "kisi_Sequence", sequenceName = "KISI_SEQ" , allocationSize = 1)
private int anahtar;
@ManyToOne(fetch = FetchType.LAZY, cascade= {CascadeType.ALL})
@JoinColumn(name = "UNVANANAHTAR", nullable = true)
private Unvan unvani;
@Column(name = "ADI", columnDefinition = "VARCHAR2(700 Byte)", nullable = false)
private String adi;
@Column(name = "SOYADI", columnDefinition = "VARCHAR2(1000 Byte)", nullable = false)
private String soyadi;
@OneToOne(fetch = FetchType.LAZY)
@PrimaryKeyJoinColumn
private Kimlik kimligi;
@Column(nullable = true)
private LocalDate dogumTarihi;
@Enumerated
@Column(name="CINSIYET", columnDefinition = "smallint", nullable = true)
private Cinsiyet cinsiyeti;
@Enumerated
@Column(name="MEDENIDURUMU", columnDefinition = "smallint", nullable = true)
private MedeniDurum medeniDurumu;
@OneToOne(fetch = FetchType.LAZY)
@PrimaryKeyJoinColumn
private KisiDetay kisiDetay;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "kisisi")
private Set<KisiIletisim> iletisimKumesi;
public Kisi() {
super();
String bosSozce = Sabit.BOSSOZCE;
this.anahtar = Integer.MIN_VALUE;
this.unvani = null;
this.adi = bosSozce;
this.soyadi = bosSozce;
this.kimligi = null;
this.dogumTarihi = Sabit.BOSTARIH;
this.cinsiyeti = Cinsiyet.VARSAYILAN;
this.medeniDurumu = MedeniDurum.VARSAYILAN;
this.iletisimKumesi = new HashSet<KisiIletisim>(0);
this.kisiDetay = null;
}
// Constructors, getters and setters
EDIT-1 Andreas 指出枚舉的定義在 class 中不存在且不合適。 Kisi 使用兩個枚舉,Cinsiyet(性別)和 MedeniDurum(婚姻狀況)。 即使我改變了它,問題仍然存在。
public enum Cinsiyet {
VARSAYILAN,
KADIN,
ERKEK
}
public enum MedeniDurum {
VARSAYILAN,
EVLI,
BEKAR,
DUL,
}
數據庫表結構如下:
當我嘗試插入Kisi時,出現錯誤:
Error: 932, Position: 121, Sql =insert into KISIPROFIL.KISI (ADI, CINSIYET, dogumTarihi, MEDENIDURUMU, SOYADI, UNVANANAHTAR, ANAHTAR) values (:1, :2, :3, :4, :5, :6, :7 ),錯誤消息 = ORA-00932:不一致的數據類型:應該是:收到的數字:BINARY
原裝 sql:
插入 KISIPROFIL.KISI (ADI, CINSIYET, dogumTarihi, MEDENIDURUMU, SOYADI, UNVANANAHTAR, ANAHTAR) 值 (?, ?, ?, ?, ?, ?, ?)
sql:
插入 KISIPROFIL.KISI (ADI, CINSIYET, dogumTarihi, MEDENIDURUMU, SOYADI, UNVANANAHTAR, ANAHTAR) 值 (:1, :2, :3, :4, :5, :6, :7)
甲骨文錯誤編號:
932
堆棧跟蹤
org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109)org.hibernate.engine.jdbc.spi.SqlExceptionHelper. convert(SqlExceptionHelper.java:95)org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:207)org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:45) org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.Z93F725A07423FE1C889F448 B33D21F46Z:2886)org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3386)org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:8
我該如何克服這個問題?
提前致謝。
Oracle 版本:個人 Oracle 數據庫 11g 發布 11.2.0.1.0 - 64 位生產
參考:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.7.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.6.Final</version>
</dependency>
問題是從“private LocalDate dogumTarihi;”開始的。 LocalDate 不能直接轉換為 DATE。 As Thorben Janssen pointed out that "JPA will map it to a BLOB instead of a DATE or TIMESTAMP. That means the database is not aware of the date object and cannot apply any optimization for it. " https://thorben-janssen.com /persist-localdate-localdatetime-jpa/
它與枚舉值無關。 你應該要么
1-在 class decleration 中將 LocalDate 轉換為 Date。 (dogumTarihi 應為“私人日期 dogumTarihi;”) 2- 你應該寫一個轉換器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.