私は、PackageクラスとUserクラスを持つSpring BootとThymeleafを使用してアプリケーションを開発しています。Thymeleaf + Spring Boot:関連オブジェクトによるオブジェクト作成(フォーム&リターン)
パッケージクラス:
@Entity
@Table(name = "table_package")
public class Package {
@Id
@GenericGenerator(name = "gen_id", strategy = "increment")
@GeneratedValue(generator = "gen_id")
private Integer id;
@ManyToOne
@JoinColumn(name = "userid")
@JsonBackReference
private User package_owner;
// private Integer userid;
private String package_name;
@OneToMany(mappedBy = "pkg")
@JsonBackReference
private Set<Article> articles;
@ManyToOne
@JoinColumn(name = "package_statusid")
@JsonBackReference
private PackageStatus packageStatus;
// private Integer package_statusid;
private String notes;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public User getPackage_owner() {
return package_owner;
}
public void setPackage_owner(User package_owner) {
this.package_owner = package_owner;
}
// public Integer getUserid() {
// return userid;
// }
//
// public void setUserid(Integer userid) {
// this.userid = userid;
// }
public String getPackage_name() {
return package_name;
}
public void setPackage_name(String package_name) {
this.package_name = package_name;
}
public Set<Article> getArticles() {
return articles;
}
public void setArticles(Set<Article> articles) {
this.articles = articles;
}
public PackageStatus getPackageStatus() {
return packageStatus;
}
public void setPackageStatus(PackageStatus packageStatus) {
this.packageStatus = packageStatus;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
@Override
public String toString() {
return "Package{" +
"id=" + id +
", package_owner=" + package_owner +
", package_name='" + package_name + '\'' +
", articles=" + articles +
", packageStatus=" + packageStatus +
", notes='" + notes + '\'' +
'}';
}
}
ユーザークラス:
@Entity
@Table(name = "table_user")
public class User {
@Id
@GenericGenerator(name="gen_id" , strategy="increment")
@GeneratedValue(generator="gen_id")
private Integer id;
@OneToMany(mappedBy = "package_owner")
@JsonBackReference
private Set<Package> packages = new HashSet<Package>();
}
私はパッケージの画面をコーディングしていますが
パッケージを挿入/インサートを追加します。
<form action="#" th:action="@{/packages/add}" th:object="${Package}" method="post">
<table class="table stripped-table" id="article-table">
<tr>
<th>
User:
</th>
<td>
<input type="text" id="user-search"/>
<input type="text" th:value="*{user.id}" hidden="hidden" th:required="required"/>
</td>
</tr>
<tr>
<th>
Package:
</th>
<td>
<input type="text" th:field="*{package_name}" th:required="required"/>
</td>
</tr>
</table>
<input type="submit" id="submit" value="Add" />
</form>
私がobjeに関連する前に私はJavaScriptのオートコンプリートを使って 'user-search'の名前を書き、user_id入力にその値を挿入して、それを私のコントローラに渡しました。
しかし、今、私は、私はこのエラーを取得テンプレートをロードしようとするたびに、両方のオブジェクト間の関係を作成したこと:私はできゲッターとセッターを見たがされてきた
Invalid property 'user' of bean class [com.app.model.Package]: Bean property 'user' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
を問題が見つかりません。私はまた、私のコントローラでのリターンの処理方法について興味がありますが、DB上のsave関数の前にオブジェクト全体を挿入すると仮定します。何か案は?
ありがとうございます。
EDIT遅れて申し訳ありませんが、出張中でした。ここで
は、コントローラです:
@RequestMapping(value = "add", method = RequestMethod.GET)
public ModelAndView addPackageForm(Model model){
List<PackageStatus> packageStatuses = packageStatusRepository.findAll();
model.addAttribute("Package", new Package());
model.addAttribute("PackageStatus", packageStatuses);
ModelAndView mav = new ModelAndView("packages/add");
mav.addObject("page_title", "Test: Add Package");
mav.addObject("template_primary", "packages");
mav.addObject("template_secondary", "add");
return mav;
}
私はあなたにMVCパターン –
をお勧めします。ユーザーの代わりに 'package_owner'を使用すると動作しますか?私の推論では、パッケージに 'user'という名前のフィールドはなく、 'User'フィールド名は 'package_owner'のみであるということです。 –
コントローラを見せてくれますか? –