tôi sử dụng Spring 3.2.3 và Hibernate 4.2.3 và JDK 7.đối tượng tham chiếu một thể hiện thoáng qua chưa được lưu: làm thế nào để tuôn ra hoặc trả lại lưu đối tượng
Tôi có một thực thể đơn giản:
@Entity
public class Language {
@Id
@GeneratedValue
private long id;
@Column(nullable = false, length = 3, unique = true)
private String code;
}
tôi lưu một thể hiện của thực thể này sử dụng một lớp chú thích @Service
với một @Transactional
phương pháp chú thích trong đó sử dụng một DAO giúp tiết kiệm các thực thể với
sessionFactory.getCurrentSession().save(object);
Sau đó tôi sử dụng d các lưuLanguage
tổ chức để tạo EntityX
, mà sử dụng nó trong một mối quan hệ ManyToOne
...
lang=new Language();
// ...
languageService.saveLanguage(lang);
e=new EntityX();
// ...
e.setLanguage(lang);
otherService.saveEntity(e);
và EntityX
được định nghĩa là ...
@Entity
public class EntityX {
@ManyToOne
@JoinColumn(nullable = false)
private Language language;
// ...
}
tôi luôn luôn nhận được ngoại lệ
Exception in thread "main" org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: somepackage.Language
Tôi cố gắng sử dụng một số định nghĩa tầng trong EntityX
' s liên quan đến Language
như được đề xuất trong các bài viết khác, nhưng nó không có hiệu lực.
Nếu tôi tải lại đối tượng đã lưu Language
bằng cách tìm số code
bằng cách sử dụng truy vấn HQL, thì mọi thứ hoạt động tốt, nhưng nó ở xa 'đẹp'.
Rất tiếc, (các) phương thức save(...)
của org.hibernate.Session
không trả lại đối tượng đã lưu.
Có ai có ý tưởng nào để giải quyết nó không?
Mã này nằm trong một 'Giao dịch' duy nhất. Các phương thức dịch vụ cũng là '@ Transactional' nhưng chúng requries không có giao dịch mới vì vậy tôi cho rằng phương thức hiện có được sử dụng. Tôi đã lưu ngôn ngữ cho riêng mình, bởi vì tôi có một thực thể Ngôn ngữ và nhiều EntityX và mỗi người trong số họ sử dụng cùng một thực thể Ngôn ngữ. – t777
kiểm tra chỉnh sửa của tôi, quá dài để nhận xét. Tôi hy vọng sẽ được rõ ràng, tiếng Anh không phải là ngôn ngữ mẹ đẻ của tôi, xin lỗi –
Hi @LucaBassoRicci, tôi đang gặp vấn đề tương tự nhưng công nghệ của tôi là khác nhau, bạn có thể hãy xem này .. http://stackoverflow.com/questions/28279304/lỗi-khi-tiết kiệm-một-đối tượng-trong-có-nước ngoài-key-đối tượng-tài liệu tham khảo-một-chưa lưu –