私は多対1(一対多)の関係を持つ2つのエンティティを持っています。エンティティ間のJPA関係。どのように関係テーブルからいくつかのフィールドだけをDBから取るようにエンティティを作る
クラスParserEntity:
import javax.persistence.*;
@Entity
@Table(name = "parser", schema = "newsmonitoringdb")
public class ParserEntity {
public ParserEntity() {
}
public ParserEntity(String name, SourceTypesEntity type) {
this.name = name;
this.type = type;
}
@Id
@Column(name = "id")
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Basic
@Column(name = "name")
private String name;
@ManyToOne(optional = false)
@JoinColumn(name="type",referencedColumnName="id")
private SourceTypesEntity type;
...//getters, setters and other fields are here
}
}
クラスParserTypesEntity:
import javax.persistence.*;
import java.util.Collection;
import java.util.List;
/**
* Created by User on 17.08.2016.
*/
@Entity
@Table(name = "source_types", schema = "newsmonitoringdb")
public class ParserTypesEntity {
@Id
@Column(name = "id")
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Basic
@Column(name = "name")
private String name;
@OneToMany(mappedBy="type", fetch=FetchType.EAGER, targetEntity = ParserEntity.class)
private Collection<ParserEntity> siteParser;
...//getters and setters are here
}
}
彼らはフィールドによって関係を持っており、すべてがOKと思われます。 しかし、ParserEntityクラスではなく、ParserEntityクラスの名前のみを別のコレクションフィールドに保存するように、ParserTypeEntityクラスが必要です。
ParserEntityオブジェクトで行われたのと同じように、DBから型を取り出すときに自動的に塗りつぶしたいと思います。
これを行う方法はありますか、または単方向の関係を変更して、すべての型を取得してから、各型の名前をIDで取得する必要がありますか?
(すべてのJPAドキュメントのように)モデルの保存内容です。コレクションの文字列を持つようにモデルを修正し、それを設定します。 –
"mappedBy"と "targerEntity"パラメータなしでOneToManyフィールドを作成しようとしました。私はコレクションの文字列パラメータを保存するコレクションを作ったが、コンパイラはOneToMany属性の値の型は "String"であってはならないと伝える – Andrey
明らかに '@ OneToMany'は関係のために使われるべきではない。 '@ ElementCollection'を必要とするStringのCollectionを保存したいと思っています!これらの概念を説明するJPAチュートリアルを読むことをお勧めします –