私はNetbeanでアプリケーションを構築しようとしています。 Eclipse IDE & JPA APIを使用します。Ecplise JPA新しい親オブジェクトを追加する
NATS.java
@Entity
@Table(name = "NATS")
Public Class NATS implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer code;
private String nName;
@Column(name = "cap_id") // for foreign key purpose
private Integer capId;
@OneToOne(cascade=CascadeType.PERSIST)
@PrimaryKeyJoinColumn(name = "cap_id")
private City capital;
public City getCapital(){
return this.capital;
}
public void setCapital (City newcapital){
this.capital = newcapital;
}
... some gets & sets methods
}
City.java
@Entity
public class City implements Serializable {
private static final long serialVersionUID = 1L;
private String cityName;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
private Integer cityId;
public String getCityName() {
return cityName;
}
public void setCityName(String newcityName) {
this.cityName = newcityName;
}
public City(String ctname) {
this.cityName = ctname;
}
public Integer getcityId() {
return cityId;
}
public void setcityId(Integer ctId) {
this.cityId = ctId;
}
}
私はNATS &市の新しいペアを追加したい場合は、私はこの使用します:
を企業はこのようなものですsomebean.java
@Stateless
public class somebean {
@PersistenceContext(unitName = "TestLocal")
private EntityManager em;
public NATs insertNewCC(String capitalname, String countryname){
City newcapital = new City(capitalname);
NATS newcountry = new NATS();
newcountry.setNationName(countryname);
newcountry.setCapital(newcapital);
em.persist(newcountry); // both objects persisted well, with "capId" still null
return newcountry;
}
public void updateCapitalId(Nations country){
country.setCapitalId(country.getCapital().getcityId());
em.merge(country);
}
}
私は行をコメントすると
genericResource.java
@Path("generic")
public class GenericResource {
@Context
private UriInfo context;
@EJB
private somebean r;
@GET
@Path("/inscountry")
@Produces("application/json")
public List<NATS> insCountry(@QueryParam("countryname") String countryname, @QueryParam("capitalname") String capitalname){
NATS newcountry = r.insertNewCC(capitalname, countryname);
//r.updateCapitalId(newcountry); <-- i want to avoid using this line
List<NATS> result= r.getListNATS();
return result;
}
:
ここでは、サービスであるr.updateCapitalId(newcountry)。 JSONに正しく表示された関係を持つ国と首都のペアが取得されますが、セッションが終了すると外部キーが保存されないため、関係が失われます。 persistsが完了した後、NATエンティティのcapIDがnullになります。だから私は1を完了するために& 1をマージする必要があります。私はコメントしたその行を使用する横に良いソリューションがありますか? ありがとうございます。
これはあなたのコードであるあなたは確かですか..?コンパイル&ネストしていないエンティティは非常に悪いことですが、エンティティごとに別々のクラスを持つことはできませんか? –
異なる.javaファイルから引用されます。私は実際に各エンティティを別々のファイルに書きます。 –