Java Spring hibernate不持久化对象节点
我拥有以下实体:Java Spring hibernate不持久化对象节点,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我拥有以下实体: @Entity public class Pages { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY) @JoinColumn(name="page") private List<Pages_lang> pages_lang; pr
@Entity
public class Pages {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinColumn(name="page")
private List<Pages_lang> pages_lang;
private long updated;
private Boolean deleted = false;
private long position;
private String icon;
@OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY, mappedBy = "parent")
private List<Pages> children;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Pages parent;
还有这个:
@Entity
public class Pages_lang {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "language")
private Language language;
private String title;
@Column(name = "text", columnDefinition = "TEXT")
private String text;
@Column(name = "plaintext", columnDefinition = "TEXT")
private String plaintext;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)//, mappedBy = "articles_lang")
@JoinColumn(name = "pages_lang")
private List<Images> images;
当我使用此方法在DB中持续创建时,它不会出现任何问题:
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<String> postPageTopLevel(@RequestBody Pages posted) {
Pages inserted = new Pages();
inserted.merge(posted);
Pages result = dao.save(inserted);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setLocation(ServletUriComponentsBuilder
.fromCurrentRequest().path("/" + result.getId())
.buildAndExpand(result.getId()).toUri());
return new ResponseEntity<String>(getGson().toJson(result), httpHeaders, HttpStatus.CREATED);
}
但是,当我想更新Pages_lang对象的属性并持久化Page对象时,该属性不会在数据库中修改
在这里,要更新的方法是:
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public ResponseEntity<String> putPage(@PathVariable Long id, @RequestBody Pages puted) {
System.out.println("");System.out.println("");System.out.println("");System.out.println("");System.out.println("");System.out.println("");
if (id != puted.getId())
return new ResponseEntity<String>("URI unmatch element", new HttpHeaders(), HttpStatus.FORBIDDEN);
Pages page = dao.findOne(id);
if (page == null)
return new ResponseEntity<String>(null, new HttpHeaders(), HttpStatus.NOT_FOUND);
dao.save(puted);
return new ResponseEntity<String>(getGson().toJson(puted), new HttpHeaders(), HttpStatus.OK);
}
我认为问题与Pages对象中Pages_lang属性的级联类型有关
有人能帮我吗
问候
编辑:
save方法是Spring存储库中包含的基本方法
BaseRepository.java
@NoRepositoryBean
public interface BaseRepository<T, ID extends Serializable> extends Repository<T, ID> {
void delete(T deleted);
Iterable<T> findAll();
T findOne(ID id);
T save(T persisted);
Iterable<T> save(Iterable<T> persited);
}
首先,尝试将id更改为Long。习惯上使用空值表示尚未持久化,原语可能会发生奇怪的事情。我倾向于怀疑声明cascade=CascadeType.PERSIST,而不是在映射Pages.Pages\u lang时使用更广泛的级联规范,但这取决于Pages实例的出处和dao.save的行为,您还没有介绍。您好,我尝试将id改为Long而不是Long,但问题仍然存在。