2017-04-07 16 views
2

注意:フルSSCCEと再現可能なソースコードはhere on my GitHub repoです。 READMEのように、クローンして、私が見ているエラーを再現するために./gradlew clean buildを実行してください。Hibernate/JPA @AttributeOverridesがGroovyでうまくいきません


は私がGroovyの(ないジャワ)のMySQLへ/から/書き込みエンティティを読み取るためにHibernate/JPAを使用する春ブーツアプリのデータモデルを設計しています。私のすべてのエンティティは、別の識別子( "refId")と同様にPKを提供する抽象的なBaseEntityを拡張します。例えば:

@Canonical 
@Entity 
@MappedSuperclass 
abstract class BaseEntity { 
    @Id 
    Long id 

    String refId 
} 

@Canonical 
@Entity 
@AttributeOverrides({ 
    @AttributeOverride(name = "id", [email protected](name="customer_id")), 
    @AttributeOverride(name = "refId", [email protected](name="customer_ref_id")) 
}) 
class Customer extends BaseEntity { 
    @Column(name = "customer_name") 
    String name 

    @Column(name = "customer_fav_food") 
    String favoriteFood 
} 

各エンティティがBaseEntityを拡張し、私はidrefIdフィールドに独自のカラム名を持つように各サブクラス/エンティティ/テーブルをしたいので、私はAttributeOverridesことを使用する必要があるので、あなたが、見ることができるように各サブクラスの宣言。

しかし、AttributeOverridesは、コンパイラの問題を引き起こしているため、私はプレーン・オア・ジャパンでは再現できません。コンパイル時にunexpected tokenというエラーが[email protected](name="customer_id")),に発生しています。

何が起こっているのかを誰でも再現して把握できますか?

答えて

2

しかし、AttributeOverridesはコンパイラの問題を引き起こしているため、私は単純なJavaで再現できません。 Javaのコンパイラとは異なり

、Groovyのコンパイラは、配列の代わりにClosureとして{ ... }を取ります。

@Canonical 
@Entity 
@AttributeOverrides([ 
    @AttributeOverride(name = "id", [email protected](name="customer_id")), 
    @AttributeOverride(name = "refId", [email protected](name="customer_ref_id")) 
]) 
class Customer extends BaseEntity { 
    // ...  
} 
+0

勝者の勝者の鶏の夕食:あなたはこのように、代わりに[ ... ]を使用する必要があります!本当にありがとう! – smeeb

+0

歓迎します:-) @smeeb – dic19

関連する問題