私はintellijとnewを使用して冬眠しています。分岐テーブル用のクラスを作成し、私は例外を取得実行中:id, institute_id, street_id, name
:自動的にクラスを生成するときに、期待されるセカンダリテーブルが見つかりません
- 分岐テーブルには、次の列が含まれています。
id
は、スーパーテーブルへの外部キーです(同じIDシーケンスを共有する2つのテーブルがあります)。
institute_id
は、テーブルを作成するための外部キーです。
street_id
は、ストリートテーブルへの外部キーです。 のIntelliJで作成された支店のクラスがある:これは私が実行コードがある
@Entity public class Branch { private long id; @javax.persistence.Column(name = "id", nullable = false, insertable = true, updatable = true, length = 19, precision = 0) @Id public long getId() { return id; } public void setId(long id) { this.id = id; } private long instituteId; @javax.persistence.Column(name = "institute_id", nullable = false, insertable = true, updatable = true, length = 19, precision = 0) @Basic public long getInstituteId() { return instituteId; } public void setInstituteId(long instituteId) { this.instituteId = instituteId; } private long streetId; @javax.persistence.Column(name = "street_id", nullable = true, insertable = true, updatable = true, length = 19, precision = 0) @Basic public long getStreetId() { return streetId; } public void setStreetId(long streetId) { this.streetId = streetId; } private String name; @javax.persistence.Column(name = "name", nullable = false, insertable = true, updatable = true, length = 50, precision = 0) @Basic public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Branch branch = (Branch) o; if (id != branch.id) return false; if (instituteId != branch.instituteId) return false; if (streetId != branch.streetId) return false; if (name != null ? !name.equals(branch.name) : branch.name != null) return false; return true; } @Override public int hashCode() { int result = (int) (id^(id >>> 32)); result = 31 * result + (int) (instituteId^(instituteId >>> 32)); result = 31 * result + (int) (streetId^(streetId >>> 32)); result = 31 * result + (name != null ? name.hashCode() : 0); return result; } private Institute instituteByInstituteId; @ManyToOne public @javax.persistence.JoinColumn(name = "institute_id", referencedColumnName = "id", nullable = false, table = "branch") Institute getInstituteByInstituteId() { return instituteByInstituteId; } public void setInstituteByInstituteId(Institute instituteByInstituteId) { this.instituteByInstituteId = instituteByInstituteId; } private Street streetByStreetId; @ManyToOne public @javax.persistence.JoinColumn(name = "street_id", referencedColumnName = "id", table = "branch") Street getStreetByStreetId() { return streetByStreetId; } public void setStreetByStreetId(Street streetByStreetId) { this.streetByStreetId = streetByStreetId; } }
(IntelliJのは、これを自動的に作成):
public static void main(final String[] args) throws Exception { final Session session = getSession(); try { System.out.println("querying all the managed entities..."); final Map metadataMap = session.getSessionFactory().getAllClassMetadata(); for (Object key : metadataMap.keySet()) { final ClassMetadata classMetadata = (ClassMetadata) metadataMap.get(key); final String entityName = classMetadata.getEntityName(); final Query query = session.createQuery("from " + entityName); System.out.println("executing: " + query.getQueryString()); for (Object o : query.list()) { System.out.println(" " + o); } } } finally { session.close(); } }
私は次の例外だ:
をorg.hibernate.AnnotationException: Cannot find the expected secondary table: no branch available for GreenWheels.Data.Entities.Branch
UPDATE
エンティティごとにxmlでエンティティを生成すると、ブランチに対して次のxmlが作成され、現在は機能します。それはどうですか?
Branch.nbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="GreenWheels.Data.Entities.Branch" table="branch" catalog="greenwheels">
<id name="id">
<column name="id" sql-type="bigint" length="19" not-null="true"/>
</id>
<property name="instituteId">
<column name="institute_id" sql-type="bigint" length="19" not-null="true"/>
</property>
<property name="streetId">
<column name="street_id" sql-type="bigint" length="19"/>
</property>
<property name="name">
<column name="name" sql-type="varchar" length="50" not-null="true"/>
</property>
<many-to-one name="instituteByInstituteId" class="GreenWheels.Data.Entities.Institute">
<column name="institute_id" not-null="true"/>
</many-to-one>
<many-to-one name="streetByStreetId" class="GreenWheels.Data.Entities.Street">
<column name="street_id"/>
</many-to-one>
</class>
</hibernate-mapping>
これは機能しません。この例外はまだ発生します。アップデートをご覧ください。 – Naor
この解決策は私のために働いた。このようなManyToOne関係をマッピングすると、 '@ JoinColumn'エントリに加えて、外部キーの' @ Column'エントリがありました。私は '@ Column'を冗長にして削除しただけです。 – scottyseus