我有几个使用相同表格形式存储翻译的服务,因此我将翻译实体移至共享项目中,并尝试在该实体上具有单向@OneToMany映射。但是我一直在追随异常
Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.examples.blog.Post.translations[com.examples.shared.domain.Translation]
我的Post类看起来像这样
package com.examples.blog.domain;
import com.examples.shared.domain.Translation;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.io.Serializable;
import java.util.List;
@Data
@Entity
@Table(name = "POSTS")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Currency implements Serializable {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
private String id;
private String author;
@Embedded
private Source source;
@OneToMany(cascade = CascadeType.ALL,
orphanRemoval = true)
@JoinColumn(name = "entity_id")
List<Translation> translations;
}
和我共享的Translation类看起来像这样:
package com.examples.shared.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "TRANSLATIONS")
@Data
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
public class Translation implements Serializable {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
private String id;
@Column(name = "language")
private String language;
@Column(name="translation")
private String translation;
@Column(name="entity_id")
@ManyToOne
private String entityId;
}
有人可以帮我弄清楚我在做什么错吗?
答案 0 :(得分:2)
以下陈述引起您的问题:
@Column(name="entity_id")
@ManyToOne
private String entityId;
您应该提到与有效实体类的关系,而不是字符串entityId
。 entityId
的类型为String
,显然不是声明的实体。
答案 1 :(得分:2)
您正在将一类中的第二类映射为一个类,但将多对映射为一个字符串而不是类。
更改
@ManyToOne
private String entityId;
到
@ManyToOne
private Currency entityId;
请参见this
答案 2 :(得分:2)
似乎休眠状态并不知道com.examples.shared.domain.Translation
实体。
您应在休眠状态下查找@Entities
类的类或包的列表。
如果您使用Spring Boot
,请使用@EntityScan(basePackages="com.examples.shared.domain")
。
如果您使用Spring
+ Hibernate
集成,请使用LocalContainerEntityManagerFactoryBean.setPackagesToScan("com.examples.shared.domain")
如果您使用普通休眠,请在 persistence.xml 或 hibernate.cfg.xml 中添加相应的条目:
<hibernate-configuration>
....
<mapping class="com.examples.shared.domain.Translation"/>
</session-factory>
</hibernate-configuration>
或者对于Java配置,请参阅文档:http://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#bootstrap-bootstrap-native-registry-MetadataSources-example