1

Hibernate にマップされたクラスを持つ Java EE アプリケーションがあります (*.hbm.xml マッピングを使用します)。ここで、JPA アノテーションを使用してマッピングを再作成する必要があります。すべて問題ありませんが、Map プロパティで正しいマッピングを作成できません。

@Entity
@Table(name = DataBaseConstants.EMPLOYEE_TABLE)
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name = DataBaseConstants.EMPLOYEE_ID, sequenceName = DataBaseConstants.EMPLOYEE_SEQ)
@GeneratedValue(generator = DataBaseConstants.EMPLOYEE_ID)
@Column(name = DataBaseConstants.EMPLOYEE_ID)
private long id = 0;
@Column(name = DataBaseConstants.EMPLOYEE_NAME)
private String name = null;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = DataBaseConstants.ADDRESS_ID_FK)
private Address address = null; 

private Map<Office, Position> officePositions = null;

これは、データベース内のデータ モデルの一部です。 DB MODEL IMAGE (申し訳ありませんが、画像を投稿できません) officeEmployee MAP のマッピングを手伝ってください

Hibernate では、この方法を使用しましたが、すべて問題ありませんでした。

<map name="officePositions" table="EMPLOYEE_POSITION_OFFICE" lazy="false"
                fetch="join" batch-size="100">
            <key>
            <column name="EMPLOYEE_ID"></column>
        </key>
        <map-key-many-to-many class="com.example.jpajdbctask.entities.Office">
            <column name="OFFICE_ID">
            </column>
        </map-key-many-to-many>
        <many-to-many column="POSITION_ID"
            class="com.example.jpajdbctask.entities.Position" />
        </map> 
4

2 に答える 2

1

私はそれを自分で使用したことがないので、正確な実装を支援することはできませんが、@CollectionOfElementsアノテーションを使用する必要があります例は次のとおりです。

@CollectionOfElements(fetch=FetchType.EAGER)
@JoinTable(
    name = "MappingTable", 
    joinColumns = @JoinColumn(name = "mapOwner"))
@Column(
   name = "mapValueItem", 
   nullable = false
)  
@org.hibernate.annotations.MapKey(
    columns={
        @Column(
             name="mapKeyItem"
        )
   }
)
protected Map<String, String> getMapping() {
    return mapping_;
}

このフォーラムは役に立つかもしれません。

于 2012-07-24T13:06:05.583 に答える
0

基本的なケース (キーがプリミティブである場合) については、例を含む MapKeyアノテーションの JavaDoc を次に示します。

あなたの場合、 @MapKeyColumn を使用する必要があるようです。これはあなたのものと非常によく似た例です。

Employeeクラス内の Map を に変更する必要がありますMap<Office, EmployeePositionOffice>

于 2012-07-24T13:04:41.370 に答える