私は、フィールド名の前にアンダースコア接頭辞を使用し、そうでない場合はラクダを使用するエンティティの束を持っています。私は、春・データをするために今、私はこのプロジェクトを移行していますことをspring-dataリポジトリのメソッド名をカスタマイズする方法は?
Customer: _id, _firstName, _lastName, _foo__id
:
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long _id;
private String _firstName;
private String _lastName;
@OneToOne
private Foo _foo;
// … methods omitted
}
リポジトリ
public interface CustomerRepository extends PagingAndSortingRepository<Customer, Long> {
Iterable<Customer> findByFoo(Foo foo);
}
テーブル内の対応するフィールドも、この命名規則を使用します多くのIllegalArgumentExceptionsを取得する:
Could not create query metamodel for method
public abstract java.lang.Iterable
com.example.repository.CustomerRepository.findByFoo(com.example.model.Foo)!
Unable to locate Attribute with the given name [foo] on this ManagedType [com.example.model.Customer]
私はhibernateの命名方針を変更する必要はありませんしかし、どのようにしてクエリメソッド生成命名アルゴリズムを変更して、エンティティ上で "findByFoo" - > "_foo"をマップするか、JPQL用語で "where x._foo__id =? 1 "
私は古い学校のXML設定を使用していますが、春の起動はありません。
編集:役に立たないこのin the docs ..
「我々は強く に助言予約文字としてアンダー扱うように、標準のJava命名規則に従ってくださいを発見した(すなわちありません代わりに のプロパティ名にアンダースコアを使用しますが、代わりにラクダの場合)。
フィールド名をリファクタリングしてアンダースコアを削除し、アンダースコアを後で追加するハイバネートネーミング戦略を実装する必要がありますか?
"foo"という属性はありません。それに先行するアンダースコアがあり、あなたのSpringメソッドにはそれがありません。 –
正確に。したがって、疑問。エンティティに "findByFoo" - > "_foo"のマッピング方法を知りたい。 – Casey
カラム名にはアンダースコアしかない場合は、Javaフィールドからアンダースコアを削除し、@Columnアノテーションを使用してカスタムカラム名を指定することができます。 – dunni