gpt4 book ai didi

java - Hibernate:通过反射持久属性访问字段 [private java.lang.Integer] 时出错

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:32 25 4
gpt4 key购买 nike

当我尝试获取实体属性时遇到奇怪的问题:

Hibernate: 
select
tarifklsk0_.ID as ID1_12_0_,
tarifklsk0_.FK_TARIF as FK_TARIF2_12_0_,
tarifservp1_.FK_TARIF as FK_TARIF2_11_1_,
tarifservp1_.ID as ID1_11_1_,
tarifservp1_.ID as ID1_11_2_,
tarifservp1_.FK_TARIF as FK_TARIF2_11_2_,
tarifservp1_.N1 as N3_11_2_
from
TR.TARIFXKLSK tarifklsk0_
left outer join
TR.TARIF_SERV_PROP tarifservp1_
on tarifklsk0_.FK_TARIF=tarifservp1_.FK_TARIF
where
tarifklsk0_.ID=?
Jun 13, 2016 7:38:26 AM org.hibernate.event.internal.DefaultLoadEventListener doOnLoad
INFO: HHH000327: Error performing load command : org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private java.lang.Integer TarifKlsk.fkTarif] by reflection for persistent property [TarifKlsk#fkTarif] : 1027303
Exception in thread "main" org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private java.lang.Integer TarifKlsk.fkTarif] by reflection for persistent property [TarifKlsk#fkTarif] : 1027303
at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:43)
....skipped...
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Integer field TarifKlsk.fkTarif to java.lang.Integer
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)

我的实体:

TarifKlsk

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.BatchSize;

@SuppressWarnings("serial")
@Entity
@Table(name = "TARIFXKLSK", schema="TR")
public class TarifKlsk implements java.io.Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID", updatable = false, nullable = false)
private Integer id;

@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name="FK_TARIF", referencedColumnName="FK_TARIF")
@BatchSize(size = 50)
private Set<TarifServProp> tarifservprop = new HashSet<TarifServProp>(0);

@Column(name = "FK_TARIF", updatable = false, nullable = false)
private Integer fkTarif;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public Set<TarifServProp> getTarifservprop() {
return tarifservprop;
}

public void setTarifservprop(Set<TarifServProp> tarifservprop) {
this.tarifservprop = tarifservprop;
}

public Integer getFkTarif() {
return fkTarif;
}

public void setFkTarif(Integer fkTarif) {
this.fkTarif = fkTarif;
}

}

TarifServProp

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@SuppressWarnings("serial")
@Entity
@Table(name = "TARIF_SERV_PROP", schema="TR")
public class TarifServProp implements java.io.Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID", updatable = false, nullable = false)
private Integer id;

@Column(name = "FK_TARIF", updatable = false, nullable = false)
private Integer fkTarif;

public Integer getId() {
return id;
}

@Column(name = "N1", updatable = false, nullable = false)
private Integer n1;

public void setId(Integer id) {
this.id = id;
}

public Integer getFkTarif() {
return fkTarif;
}

public void setFkTarif(Integer fkTarif) {
this.fkTarif = fkTarif;
}

public Integer getN1() {
return n1;
}

public void setN1(Integer n1) {
this.n1 = n1;
}

}

我的测试模块:

    public static void main(String[] args) {
SessionFactory sf = HibernateUtil.getSessionFactory();
Session sess = sf.openSession();
sess.beginTransaction();

TarifKlsk k2=sess.get(TarifKlsk.class, 1027303);
for (TarifServProp t : k2.getTarifservprop()) {
System.out.println("Tar="+t.getN1());
}

System.out.println("End init");

我做错了什么?我已经检查了这些实体的所有字段,并且都正确命名了....

更新我的 POM.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.journaldev.hibernate</groupId>
<artifactId>HibernateEHCacheExample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description>Hibernate Secondary Level Cache Example using EHCache implementation</description>

<dependencies>
<!-- Hibernate Core API -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.1.0.Final</version>
</dependency>
<!-- EHCache Core APIs -->
<!-- http://mvnrepository.com/artifact/net.sf.ehcache/ehcache-core -->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.6.11</version>
</dependency>

<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-ehcache -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>5.2.0.Final</version>
</dependency>

<!-- EHCache uses slf4j for logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.5</version>
</dependency>
</dependencies>
</project>

Upd2

我发现我的子实体不包含 fk_tarif 对应于来自 master 的 fk_tarif 的记录......但我认为这无关紧要,为什么存在错误?

最佳答案

这是5.0和5.1.0版本的bug https://hibernate.atlassian.net/browse/HHH-10618

关于java - Hibernate:通过反射持久属性访问字段 [private java.lang.Integer] 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37780811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com