0

複雑なマッピングを持つエンティティがあり、正しく注釈を付けることができません。

エンティティは次のとおりです。

@Entity
@Table(name = "bank")
class Bank {
    @Column(name = "type")
    int type

    @ElementCollection
    @CollectionTable(name = "bank_fp", joinColumns = @JoinColumn(name = "bank_id"))
    @MapKeyColumn(name = "finance_percent")
    Map<Double, BankRates>
}

? embeddable or entity ?
class BankRates {
    @ElementCollection
    @CollectionTable(name = "bankrates", joinColumns = @JoinColumn(name = "bfp_id"))
    @MapKeyColumn(name = "track_class")
    Map<String, TrackRates>
}

? embeddable or entity ?
class TrackRates {
    ? how to map ?
    Map<YearsRange, Double>
}

@Embeddable
@Access(AccessType.FIELD)
class YearsRange {
    @Column(name = "from")
    int from
    @Column(name = "to")
    int to
}

私にはそれらがテーブルのようです:

Bank: id, type
bank_fp: id, bank_id, finance_percent - table for the map in the bank entity
bank_rates: bfp_id, track_class, from, to, rate - table for BankRates, TrackRates, YearsRange all embedded in a single table cuz its only mappings

ハイバネートマッピングが得意な方、助けてください。

4

1 に答える 1

0

@entity class BankRates独自のIDを持っているので

(bfp_id、track_class)の重複が多数含まれているためbank_rates、マップロジックを自分で実装する必要があるようにマップすることはできません。

class BankRates {
    @ElementCollection
    @CollectionTable(name = "bankrates", joinColumns = @JoinColumn(name = "bfp_id"))
    List<TrackRate>

}

@Embeddable
class TrackRate {
    @Column(name = "track_class")
    String trackClass;
    YearsRange
    Double
}

@Embeddable
@Access(AccessType.FIELD)
class YearsRange {
    @Column(name = "from")
    int from
    @Column(name = "to")
    int to
}
于 2012-05-25T06:37:11.840 に答える