[英]Many To One relation inside Embeddable , Hibernate
我有一個場景,其中hibernate中的Embeddable
類使用Entity
。 根據不同的答案,我發現了SO等各個環節,我們可以寫@ManyToOne, @OneToMany
內部Embeddable
類。
但這樣做給了我HibernateMappingExeption
請考慮以下示例:我有兩個實體和一個Embeddable類,如下所示:
實體A.
@Entity
@Table(name = "A")
public class A {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int a_id;
@ElementCollection
@JoinTable(name = "embeded_class_table", joinColumns = @JoinColumn(name = "a_id"))
private List<EmbeddedClass> embeddedClass;
實體B.
@Entity
@Table(name = "B")
public class B {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int b_id;
使用實體B的可嵌入類
@Embeddable
public class EmbeddableClass {
@ManyToOne
@JoinColumn(name = "b_id")
private B b;
我得到的錯誤如下:
org.hibernate.MappingException: Could not determine type for: app.model.B, at table: embeded_class_table, for columns: [org.hibernate.mapping.Column(b)]
任何人都可以建議我是否正確使用這些東西,如果是的話,我錯過了什么?
假設您的方案我嘗試了以下內容,我沒有遇到任何問題:
@Entity
@Table(name = "A")
public class A {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int a_id;
@ElementCollection
@JoinTable(name = "embeded_class_table", joinColumns = @JoinColumn(name = "a_id"))
private List<EmbeddableClass> embeddedClass;
public int getA_id() {
return a_id;
}
public void setA_id(int a_id) {
this.a_id = a_id;
}
public List<EmbeddableClass> getEmbeddedClass() {
return embeddedClass;
}
public void setEmbeddedClass(List<EmbeddableClass> embeddedClass) {
this.embeddedClass = embeddedClass;
}
}
@Entity
@Table(name = "B")
public class B {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int b_id;
}
@Embeddable
public class EmbeddableClass {
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "b_id")
private B b;
public B getB() {
return b;
}
public void setB(B b) {
this.b = b;
}
}
的hibernate.cfg.xml
<hibernate-configuration>
<session-factory>
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.password">xxxx</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
<property name="hibernate.connection.username">elias</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.hbm2ddl.auto">create-drop</property>
<property name="show_sql">true</property>
<mapping class="com.springex.dto.A"></mapping>
<mapping class="com.springex.dto.B"></mapping>
<mapping class="com.springex.dto.EmbeddableClass"></mapping>
</session-factory>
</hibernate-configuration>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.