gpt4 book ai didi

Hibernate 和 JPA - 错误映射通过接口(interface)公开的嵌入式类

转载 作者:行者123 更新时间:2023-12-03 14:16:37 25 4
gpt4 key购买 nike

我们有一组接口(interface),用作 API,并从其他模块引用。
这些接口(interface)的一组具体实现,专用于“主”应用程序模块。这些类带有许多注释(JPA 以及用于 XML 序列化的 XStream)。

我遇到了一个问题。我们有一个用户类,其中包含许多与位置相关的字段。我们想将它们汇总到一个地址类中。我们希望数据(暂时)保留在同一个表中。该方法是嵌入式类。

问题是类型签名必须只引用其他接口(interface)以满足它们实现的接口(interface)。

当我尝试持久化 UserImpl 时,出现异常:

org.hibernate.MappingException: Could not determine type for: com.example.Address, at table: User, for columns: [org.hibernate.mapping.Column(address)]



示例代码:
interface User {
int getId();
String getName();
Address getAddress();
}

@Entity
class UserImpl implements User {
int id;
String name;
Address address;

int getId() {
return id;
}

void setId(int id) {
this.id = id;
}

String getName() {
return name;
}

String setName(String name) {
this.name = name;
}

@Embedded
Address getAddress() {
return address;
}

void setAddress(Address address) {
this.address = address;
}
}


interface Address {
String getStreet();
String getCity();
String getState();
String getZip();
String getCountry();
}

@Embeddable
class AddressImpl implements Address {
String street;
String city;
String state;
String zip;
String country;

public String getStreet() {
return street;
}

public String getCity() {
return city;
}

public String getState() {
return state;
}

//... etc
}

最佳答案

您可以使用 @Target Hibernate Annotation(它是 JPA 注释的特定于 Hibernate 的扩展)

@Embedded
@Target(AddressImpl.class)
Address getAddress() {
return address;
}

关于Hibernate 和 JPA - 错误映射通过接口(interface)公开的嵌入式类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1071293/

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