私はJPA(Java Persistence API)を読んでいます。私は埋め込み可能なクラスについて読んだ。だから、私は自分のエンティティクラスでそのコンセプトを使用しようとしています。しかし、これを使用している間、私は分離されたエンティティの問題に直面しています。エンティティで埋め込みクラスを使用している間、分離されたエンティティが継承されます。
ここではエンティティに埋め込み可能なクラス(ZipCode)があります。
組み込みクラス
@Embeddable public class ZipCode {
private String zip;
private String plusFour;
//getter & setter also.
}
エンティティークラス
@Entity
@Table(name = "address")
public class Address {
@Id
@GeneratedValue(strategy = IDENTITY)
private long id;
@Embedded
private ZipCode zipCode;
//getter & setter also.
}
私の永続コード:
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Inject
private CrudService crudService;
public RegisterServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ZipCode z = new ZipCode();
z.setZip("bharti");
z.setPlusFour("rawat");
Address a = new Address();
a.setId(1);
a.setZipCode(z);
try{
crudService.create(a);
}catch(Exception e){
log.info("exception occurs "+ e.getMessage());
}
}
}
マイCrudSrviceコード:
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class CrudServiceImpl implements CrudService {
@PersistenceContext(unitName = "localmedecube")
private EntityManager em;
public CrudServiceImpl() {
// TODO Auto-generated constructor stub
}
@Override
public <T> T create(T t) {
this.em.persist(t);
this.em.flush();
this.em.refresh(t);
return t;
}
@Override
public void delete(@SuppressWarnings("rawtypes") Class type, Object id) {
@SuppressWarnings("unchecked")
Object ref = this.em.getReference(type, id);
this.em.remove(ref);
}
@Override
public <T> T update(T t) {
return this.em.merge(t);
}
}
私はそれがによって引き起こされるこの
のように私にエラーを与えている私の住所エンティティを永続化しよう:javaxの。 persistence.PersistenceException:org.hibernate.PersistentObjectException:デタッチされたエンティティが に渡されるpersist:model.Address
この例外が発生する理由を教えてください。また、私に適切な答えを教えてください。
どのようにそれを維持しようとしますか?あなたはcrudService.createメソッドを共有できますか? – xxlali
Ok @xxlali私はCRUDコードも共有しています。 –
あなたはpersistメソッドを使用します。私が知っているように、永続メソッドを使用する場合は、オブジェクトのidを設定しないでください。 'a.setId(1);' – xxlali