gpt4 book ai didi

java - Hibernate 映射异常

转载 作者:行者123 更新时间:2023-11-30 05:13:14 25 4
gpt4 key购买 nike

我收到此 hibernate 错误:

org.hibernate.MappingException: Could not determine type for: 
a.b.c.Results$BusinessDate, for columns: [org.hibernate.mapping.Column(businessDate)]

该类如下。有谁知道为什么我会收到此错误?

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"businessDate"
})
@XmlRootElement(name = "Results")
@Entity(name = "Results")
@Table(name = "RESULT")
@Inheritance(strategy = InheritanceType.JOINED)
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
public class Results implements Equals, HashCode
{

@XmlElement(name = "BusinessDate", required = true)
protected Results.BusinessDate businessDate;

public Results.BusinessDate getBusinessDate() {
return businessDate;
}

public void setBusinessDate(Results.BusinessDate value) {
this.businessDate = value;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"raw",
"display"
})
@Entity(name = "Results$BusinessDate")
@Table(name = "BUSINESSDATE")
@Inheritance(strategy = InheritanceType.JOINED)
public static class BusinessDate implements Equals, HashCode
{

....
<小时/>

更新:此代码由 HyperJaxB 生成。所以我并不声称了解全部,只是尝试对其进行一些更改!

<小时/>

更新2:这是 full (是的,很大)src 文件

最佳答案

使用静态嵌套类作为字段类型很好并且受支持。但 Hibernate 不知道如何将如此复杂的类型映射到列类型(这就是错误消息所说的)。因此,您需要创建一个用户类型来处理此问题,或者使用 @OneToOne 注释来注释 Results.BusinessDate 字段,以将其保留在另一个表中(我会还要删除无用的@Inheritance,但这不是这里的问题)。

更新:只是澄清一下,使用用户类型或使用 @OneToOne 映射复杂类型确实有效。以下代码完美运行(经过测试):

@Entity
public class EntityWithStaticNestedClass implements Serializable {
@Id
@GeneratedValue
private Long id;

@OneToOne
private EntityWithStaticNestedClass.StaticNestedClass nested;

public Long getId() { return id; }

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

public EntityWithStaticNestedClass.StaticNestedClass getNested() {
return nested;
}

public void setNested(EntityWithStaticNestedClass.StaticNestedClass nested) {
this.nested = nested;
}

@Entity
public static class StaticNestedClass implements Serializable {
@Id
@GeneratedValue
private Long id;

public Long getId() { return id; }

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

两个实体都很好地保留在各自的表中。但是您没有显示完整的代码,也没有显示确切的错误,所以我无法说出为什么它不适合您(也许您缺少 @Id 等)。

话虽这么说,如果您根本不希望 businessDate 被持久化,请使用 @Transient 对其进行注释(对于 JPA,字段默认情况下是持久化的):

更新:您不能混合字段和属性访问。所以这里需要用@Transient注释getBusinessDate()。抱歉,我无法从显示的代码中猜出这一点,我认为这是显而易见的。

关于java - Hibernate 映射异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2611315/

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