Java EE JSP/EJB3 を使用していますが、テーブル間のリレーションの実装に問題があります。最初はIDを保存することを考えていましたが、オブジェクトへの参照を保存するEJBの目的を無効にすることを読んだことがあります
私の問題を説明するためのテスト例として、車のモデルと車のブランドの関係を考え出しました。この Web アプリケーションでは、ユーザーは最初にブランドを作成します。次に車を作成し、ドロップダウンからブランドを選択します。
車 -> ランド: 多対 1 ブランド -> 車: 1 対多
public class Brand implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private long id;
@Column(name="brand_name")
private String brand_name;
@Column(name="cars_fk")
private Set<Car> cars;
...
}
以下は車のEntitybeanです
public class Car implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private long id;
private Brand brand;
@ManyToOne(fetch = FetchType.LAZY)
@Column(name="brand_FK")
private Brand brand;
...
}
上記が正しいことを考えると(私にはわかりません)
これらの入力を処理するためのベストプラクティスは何ですか
私はこのhtmlを持っているとしましょう(選択が異なる必要がある場合は教えてください)
<form action="processCar.jsp">
Model: <input type="text" name="title"><br>
<select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
<input type="submit" value="Submit">
</form>
ブランド オプションは、Brand.findAll から読み込まれます。
また、これが正しい場合、ブランド名/ID からエンティティ オブジェクト Brand への変更はどこで行われますか? セッション Bean で ?
public void createCar(String title,String brandname){
Query query = em.createNamedQuery("Brand.getBrandbyName");
query.setParameter("brand_name", brandname);
Brand brand = (Brand)query.getSingleResult();
carSLSBManagement.create(title,brand);
}
前もって感謝します