如何正确映射我的类(通过映射引用未知目标实体属性)
我意识到已经有很多问题询问有关此异常消息的问题,但我已经阅读了它们,所提供的修补程序没有帮助,并且失败解决我的情况:在使用类层次结构和歧视时遇到这个异常信息。我使用休眠5个注释和获得对初始化以下异常(请原谅我的类/变量名称混淆和我在龙目岛的注释评论,柜面你不熟悉的龙目岛):如何正确映射我的类(通过映射引用未知目标实体属性)
org.hibernate作为.AnnotationException:引用的mappedBy未知 目标实体属性: com.example.entity.Ca在 com.example.entity.A.cs
下面是我的类(与不相关的字段中删除)
@Entity
@Data // generates getters/setters for all fields
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class A implements Persistable<String> {
@Id
@NonNull
private String id;
@NonNull
@OneToMany(mappedBy = "a", orphanRemoval = true, cascade = PERSIST)
private Set<C> cs;
}
。
@Data //generates getters/setters for all fields as well as toString, equals, and hashCode implementations
@Entity
@NoArgsConstructor //generates a no args constructor (required by hibernate)
@AllArgsConstructor //generates a constructor with all fields present
@DiscriminatorColumn(discriminatorType = INTEGER, name = B.DISCRIMINATOR_NAME)
public abstract class B implements Persistable<UUID> {
protected static final String DISCRIMINATOR_NAME = "direction";
protected static final String DISCRIMINATOR_1_VALUE = "1";
protected static final String DISCRIMINATOR_1_VALUE = "2";
@Id
@GeneratedValue
@Column(columnDefinition = "uuid")
private UUID id;
@NonNull
@ManyToOne(optional = false)
@JoinColumn(nullable = false, updatable = false)
private A a;
}
。
@Entity
@NoArgsConstructor //generates a no args constructor (required by hibernate)
@ToString(callSuper = true) //generates toString method which calls super.toString
@EqualsAndHashCode(callSuper = true) //generates equals and hashCode methods which call their respective methods in the super class
@DiscriminatorValue(B.SEND_DISCRIMINATOR_VALUE)
public class C extends B {
}
那么,我做错了什么?尽我所知,一切都设置正确。
原来,我试图做的事是不可能的,而Hibernate开发人员并不认为它是一个bug /问题。详细信息请参见https://hibernate.atlassian.net/browse/HHH-7635。
经过仔细观察,我可以看到您需要将您的抽象类映射为@MappedSuperclass
而不是@Entity
以便使映射工作。
但是C有从B继承的属性的getter和setter ...应该就足够了吧?无论如何,我尝试将它添加到C但它并没有帮助 –
但是B不是'@ MappedSupertype'它应该是@Inntity – Antoniossss
感谢@Antoniossss,这正是我所需要的。请随时更新您的答案,建议使用'@ MappedSuperclass'并将其标记为正确答案。 –
如何使''属性'受保护'而不是'私人'? – Ish
@Ish没有效果:( –