2017-03-08 7 views
0

EclipseLinkのバージョンは2.5.1エンティティコンストラクタで直接プロパティをEclipseLinkで参照できますか?

GlassFish WebサーバーからTomCatに移行しました。これは、私たちを静的織りに切り替えることにしました。なぜなら、TomCatの動的織りでは、それほど簡単に機能しないからです。 静的な製織が機能するようになったので、それはかなり違った働きをしているようです。 私は、コンストラクタに直接いくつかのプロパティを設定するエンティティがある場合:このテストは失敗します

class Entity { 
    @Column 
    private String name; 

    public Entity() { 
     name = "something"; 
    } 

    public String getName() { 
     return name; 
    } 
} 

かいつまん:

Entity e = new Entity(); 
assertEquals("something", e.getName()); // e.getName() returns null 

getName()は、織った後、もうthis.nameを返すされていないため、この問題が発生しました。代わりに、初期化のためのルーティングを呼び出し(必要な場合)、(おそらく)、いくつかの基になるHashMapからプロパティの値を取得します。 しかし、コンストラクタが織り込まれていない、私もウィーバーの情報源に見て、明示的にこれをオプトアウトすると思われている:

/** 
* Construct a MethodWeaver and allow it to process the method. 
*/ 
@Override 
public MethodVisitor visitMethod(int access, String methodName, String desc, String signature, String[] exceptions) { 
    MethodVisitor mv = super.visitMethod(access, methodName, desc, signature, exceptions); 
    if (!alreadyWeaved) { 
     // skip constructors, they will not changed 
     if (!"<init>".equals(methodName) && !"<cinit>".equals(methodName)) { 
      // remaining modifications to the 'body' of the class are 
      // delegated to MethodWeaver 
      mv = new MethodWeaver(this, methodName, desc, mv); 
     } 
    } 
    return mv; 
} 

質問は多分私はここで何かを見逃していますか?エンティティ自身のctorで直接プロパティを使用できないことはEclipseLink 2.5.1の実際の現実ですか? (それはどこにも言及されておらず、少なくともgooglableではない)

答えて

0

はい、わかることがあります。

しかし、ゲッターに見えないプロパティに私たちを導く問題がありました。 実際にMappedSuperclassの継承があり、このクラスを子クラスでシャドーしていました。本質的には:

class A { 
    @Column() 
    protected String name; 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 
} 

class B extends A { 
    @Column() 
    protected String name; 

    // no @Override here 
    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 
} 

私たちはただそのプロパティをシャドウしていました。

関連する問題