タグ付けされた質問 「jpa」

Java Persistence API(JPA)は、Javaオブジェクト/クラスとリレーショナルデータベース間のデータへのアクセス、永続化、および管理のためのJava仕様です。これはEJB 3.0仕様の一部であり、オブジェクトからリレーショナルへのマッピング(ORM)の業界標準アプローチです。

20
JPA getSingleResult()またはnull
存在しない場合にinsertOrUpdate挿入するメソッドがありEntityます。存在する場合は更新します。これを有効にするにはfindByIdAndForeignKey、それがnull挿入を返した場合は更新しないでください。問題は、それが存在するかどうかをどのように確認するかです。だから私は試してみましたgetSingleResult。しかし、それは例外をスローします public Profile findByUserNameAndPropertyName(String userName, String propertyName) { String namedQuery = Profile.class.getSimpleName() + ".findByUserNameAndPropertyName"; Query query = entityManager.createNamedQuery(namedQuery); query.setParameter("name", userName); query.setParameter("propName", propertyName); Object result = query.getSingleResult(); if (result == null) return null; return (Profile) result; } がgetSingleResultスローされますException。 ありがとう
136 java  jpa 

3
@Columnは@ManyToOneプロパティでは許可されていません
プロパティが次のように設定されているJPAエンティティがあります @ManyToOne @Column(name="LicenseeFK") private Licensee licensee; しかし、JBoss 6にデプロイすると、アプリケーションが次のエラーをスローします。 org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property JPA 2.0実装としてHibernate 3.5を使用しています。 外部キー列を参照するには何を使用すればよいですか?

8
Spring Dataリポジトリをテストする方法は?
UserRepositorySpring Dataの助けを借りて作成されたリポジトリ(たとえば、)が必要です。私はspring-dataを初めて使用しますが(springは使用しません)、このチュートリアルを使用します。データベースを扱うための私のテクノロジーの選択は、JPA 2.1とHibernateです。問題は、そのようなリポジトリの単体テストを作成する方法について私が無知であることです。 create()メソッドを例にとってみましょう。私は最初にテストを行っているので、そのための単体テストを作成することになっています。そこで、3つの問題にぶつかります。 最初に、インターフェイスのEntityManager存在しない実装にモックを注入するにはどうすればよいUserRepositoryですか?Spring Dataはこのインターフェースに基づいた実装を生成します: public interface UserRepository extends CrudRepository<User, Long> {} ただし、EntityManagerモックや他のモックを使用するように強制する方法がわかりません。自分で実装を記述した場合、おそらくのセッターメソッドがありEntityManager、モックをユニットテストに使用できます。(実際のデータベース接続に関しては、およびのJpaConfiguration注釈が付けられたクラスが@Configurationあり@EnableJpaRepositories、プログラムDataSourceによってEntityManagerFactory、EntityManagerなどのBeanを定義していますが、リポジトリはテストに適しており、これらのものをオーバーライドできる必要があります)。 次に、相互作用をテストする必要がありますか?私はどのような方法を把握することは困難であるEntityManagerとQuery(それに似呼ばれるようになっているverify(entityManager).createNamedQuery(anyString()).getResultList();)、それは実装を書いている人は私ではないので、。 3番目に、Spring-Dataで生成されたメソッドを最初に単体テストする必要がありますか?私が知っているように、サードパーティのライブラリコードは単体テストではなく、開発者自身が作成したコードのみが単体テストされることになっています。しかし、それは本当ならば、それはまだシーンに最初の質問の背中をもたらします:言うが、私は実装を書くことになるための私のリポジトリ用のカスタムメソッドのカップルを、持って、どのように私は私のモック注入しないEntityManagerとQuery生成され、最終的にはリポジトリ? 注:統合テストと単体テストの両方を使用してリポジトリをテストします。統合テストではHSQLインメモリデータベースを使用していますが、単体テストではデータベースを使用していません。 そしておそらく4番目の質問は、統合テストで正しいオブジェクトグラフの作成とオブジェクトグラフの取得をテストすることは正しいですか(たとえば、Hibernateで定義された複雑なオブジェクトグラフがあるとします)。 更新:今日はモックインジェクションの実験を続けました-モックインジェクションを可能にする静的内部クラスを作成しました。 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @Transactional @TransactionConfiguration(defaultRollback = true) public class UserRepositoryTest { @Configuration @EnableJpaRepositories(basePackages = "com.anything.repository") static class TestConfiguration { @Bean public EntityManagerFactory entityManagerFactory() { return mock(EntityManagerFactory.class); } @Bean public EntityManager entityManager() { …

4
単方向と双方向のJPAとHibernateの関連付けの違いは何ですか?
単方向と双方向の関連付けの違いは何ですか? dbで生成されたテーブルはすべて同じであるため、私が見つけた唯一の違いは、双方向の関連付けのそれぞれの側が他方を参照し、単方向ではないことです。 これは一方向の関連付けです public class User { private int id; private String name; @ManyToOne @JoinColumn( name = "groupId") private Group group; } public class Group { private int id; private String name; } 双方向の関連付け public class User { private int id; private String name; @ManyToOne @JoinColumn( name = "groupId") private …


11
JPA CascadeType.ALLが孤立を削除しない
次のマッピングでJPAを使用して孤立ノードを削除するのに問題があります @OneToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "owner") private List<Bikes> bikes; 孤立したロールがデータベースにぶら下がっている問題があります。 注釈org.hibernate.annotations.CascadeHibernate固有のタグを使用できますが、明らかにソリューションをHibernate実装に結び付けたくありません。 編集:JPA 2.0はこれに対するサポートを含むようです。
132 java  hibernate  orm  jpa  jpa-2.0 

2
SpringデータJPAのsaveとsaveAndFlushの違い
を介してCRUD操作をテストすることにより、Spring Data JPAを学習しようとしていJpaRepositoryます。 私は2つの方法に出くわしたsaveとsaveAndFlush。これら2つの違いはわかりません。呼び出すsaveと、私の変更はデータベースに保存されるので、の用途は何ですかsaveAndFlush。

11
JPAを使用するKotlin:デフォルトのコンストラクター地獄
JPAが必要とするように、@Entityクラスは、データベースからオブジェクトを取得するときにオブジェクトをインスタンス化するデフォルト(非引数)コンストラクターを持つ必要があります。 Kotlinでは、プロパティは次の例のように、プライマリコンストラクタ内で宣言するのに非常に便利です。 class Person(val name: String, val age: Int) { /* ... */ } ただし、非引数コンストラクターがセカンダリコンストラクターとして宣言されている場合、プライマリコンストラクターの値を渡す必要があるため、次のように、それらに有効な値が必要です。 @Entity class Person(val name: String, val age: Int) { private constructor(): this("", 0) } プロパティが単なるより複雑なタイプでStringありInt、null可能ではない場合、特にプライマリコンストラクターとinitブロックに多くのコードがあり、パラメーターがアクティブに使用されている場合、それらの値を提供することは完全に悪いように見えます- -それらがリフレクションによって再割り当てされる場合、ほとんどのコードが再度実行されます。 さらに、valコンストラクターの実行後に-propertiesを再割り当てできないため、不変性も失われます。 したがって、問題は、コードを重複させずに「マジック」初期値と不変性の損失を選択して、JPAで動作するようにKotlinコードをどのように適合させることができるかということです。 PS JPA以外のHibernateがデフォルトのコンストラクターなしでオブジェクトを構築できるのは本当ですか?

3
追加の列を使用した多対多関連テーブルのマッピング
私のデータベースには3つのテーブルが含まれています。ユーザーエンティティとサービスエンティティは多対多の関係にあり、次のようにSERVICE_USERテーブルと結合されています。 ユーザー-SERVICE_USER-サービス SERVICE_USERテーブルには、追加のBLOCKED列が含まれています。 そのようなマッピングを実行する最良の方法は何ですか?これらは私のエンティティクラスです @Entity @Table(name = "USERS") public class User implements java.io.Serializable { private String userid; private String email; @Id @Column(name = "USERID", unique = true, nullable = false,) public String getUserid() { return this.userid; } .... some get/set methods } @Entity @Table(name = "SERVICES") public class CmsService implements …

26
Hibernate:「フィールド 'id'にはデフォルト値がありません」
私はHibernateの単純な問題だと思っていることに直面していますが、それを解決することはできません(Hibernateフォーラムにアクセスできないことは確かに役に立ちません)。 永続化したい単純なクラスがありますが、取得し続けます: SEVERE: Field 'id' doesn't have a default value Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not insert: [hibtest.model.Mensagem] at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91) [ a bunch more ] Caused by: java.sql.SQLException: Field 'id' doesn't have a default value [ a bunch more ] 永続化クラスに関連するコードは次のとおりです。 package hibtest.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; …

3
Spring Data JPAは、大規模プロジェクトのHibernateとどう違うのですか?
新しいプロジェクトでHibernateを使い続けるべきか、それともJPAと新しいSpring Dataの実装で足を踏み入れるべきかを判断するのに苦労しています。 Spring Dataフレームワークは、大規模なプロジェクトを対象としていますか? @Query注釈を使用することによるコード削減の利点は確かにわかりますが、動的クエリに対して何をしますか?非常に複雑なsave()メソッドを実装する場合はどうでしょうか? ドキュメントには、メインリポジトリが実装するカスタムインターフェイスと実装を作成するように記載されていますが、クラッドリポジトリ自体のスーパーメソッドにアクセスする必要がある場合はどうでしょうか。crudリポジトリはカスタムのリポジトリを実装します-逆ではありません。奇妙なデザインのようです。 このフレームワークが複雑で大規模なアプリケーションの課題に対応できるかどうかは非常に不確かです。私はHibernateで多くの問題に遭遇したことがなく、Spring Data JPAを使用するのではなく、古き良き信頼性を維持することを検討しています。 私は何をすべきか?Spring Data JPAを使用すると、予期せぬ複雑さとコストが発生しますか?


2
ORMマッピングの「所有側」とは何ですか?
正確には何を所有している側の平均?マッピングの例(1対多、1対1、多対1)の説明は何ですか? 次のテキストは、Java EE 6ドキュメントの@OneToOneの説明からの抜粋です。そこにはコンセプトを所有する側のコンセプトが見られます。 1対1の多重度を持つ別のエンティティへの単一値の関連付けを定義します。通常、関連付けられているターゲットエンティティを明示的に指定する必要はありません。参照されるオブジェクトのタイプから推測できるためです。関係が双方向の場合、非所有側はOneToOneアノテーションのmappedBy要素を使用して、所有側の関係フィールドまたはプロパティを指定する必要があります。
128 java  hibernate  orm  jpa  mapping 

7
どのアノテーションを使用する必要がありますか:@IdClassまたは@EmbeddedId
JPA(れるJava Persistence API)仕様では、エンティティ複合キーを指定するための2種類の方法があります@IdClassと@EmbeddedId。 マッピングされたエンティティで両方のアノテーションを使用していますが、にあまり詳しくない人にとっては大きな混乱になることがわかりましたJPA。 複合キーを指定する方法を1つだけ採用したいと思います。どれが本当に最高ですか?どうして?

8
Spring-Data-JPAアノテーションのsetMaxResults?
Spring-Data-JPAをプロジェクトに組み込もうとしています。私を混乱させる1つのことは、アノテーションによってsetMaxResults(n)をどのように実現するかです。 たとえば、私のコード: public interface UserRepository extends CrudRepository<User , Long> { @Query(value="From User u where u.otherObj = ?1 ") public User findByOhterObj(OtherObj otherObj); } one (and only one)otherObjからUser を返す必要があるだけですが、maxResultsに注釈を付ける方法が見つかりません。誰かが私にヒントを与えることはできますか? (mysqlは不平を言う: com.mysql.jdbc.JDBC4PreparedStatement@5add5415: select user0_.id as id100_, user0_.created as created100_ from User user0_ where user0_.id=2 limit ** NOT SPECIFIED ** WARN util.JDBCExceptionReporter - …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.