2017-01-12 10 views
0

私はバイトバディを使用して、JPAエンティティとJPAリポジトリを生成しています。私はJPAエンティティを生成できますが、対応するJPAリポジトリを生成することはできません。以下は、バネブートJPAリポジトリクラスのバイトバディ実行時代

Class<?> type = new ByteBuddy() 
    .subclass(Object.class) 
    .name("Person") 
    .defineField("id", Integer.class, Visibility.PRIVATE) 
    .defineMethod("getId", Integer.class, Visibility.PUBLIC) 
    .intercept(FieldAccessor.ofBeanProperty()) 
    .defineMethod("setId", void.class, Visibility.PUBLIC).withParameter(Integer.class) 
    .intercept(FieldAccessor.ofBeanProperty()) 
    .make() 
    .load(getClass().getClassLoader(), ClassLoadingStrategy.Default.WRAPPER) 
    .getLoaded(); 

私は以下のようにJPAのreporitories・ブート対応の春を生成したいと思い、私は次のようにビュートバディを使用して、上記生成することができる午前

import javax.persistence.*; 
@Entity 
public class Person { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    protected Person(){} 

    @Override 
    public String toString() { 
     return String.format("Person[id=%d]",id,name); 
    } 
} 

Personエンティティを表すコードであります

import com.model.Person; 
import org.springframework.data.jpa.repository.JpaRepository; 

public interface PersonRepository extends JpaRepository <Person, Long> { 

} 

Generic属性を使用してこのインターフェイスを作成する方法。また、この作業(動的コード生成を使用して)がPersonオブジェクトを永続化するでしょうか?

答えて

1

あなたはジェネリック型を作成するためにTypeDescription.Generic.Builder::parameterizedTypeを使用することができます。

TypeDescription.Generic genericType = TypeDescription.Generic.Builder 
    .parameterizedType(JpaRepository.class, type, Long.class) 
    .build(); 

あなたはその後、ByteBuddy::makeInterfaceに、このジェネリック型を供給することができます:

DynamicType dt = new ByteBuddy() 
    .makeInterface(genericType) 
    .name("com.model.Person") 
    .make(); 
関連する問題