'各位高手,目前正在學習Spring Hibernate。我添加了 HibernateUtil 類以在創建/洗掉等命令后使用它。我使用 cascadeALL 進行一對一映射,當我運行洗掉或創建類時,它們只更新資料庫中的 Instructor 表,而不是相關的 Instuctor Detail 表。它可以作業,如果我在 CreateDemo 類中撰寫命令 - session.save(tempInstructor); session.save(tempInstructorDetail); 但據我所知,我應該只能寫 session.save(tempInstructor); - 這也會更新鏈接表。DeleteDemo 也是如此。為什么 cascade = CascadeType.ALL 不起作用?
enter code here
@Entity
@Table(name = "instructor")
public class Instructor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column( name = "id")
private int id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
private String email;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "instructor_detail_id")
private InstructorDetail instructorDetail;
enter code here
@Entity
@Table(name = "instructor_detail")
public class InstructorDetail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "youtube_channel")
private String youtubeChannel;
@Column(name = "hobby")
private String hobby;
enter code here
@SpringBootApplication
public class CreateDemo {
public static void main(String[] args) {
SpringApplication.run(CreateDemo.class, args);
Instructor tempInstructor = new Instructor('Vilma', 'Kalna', '[email protected]');
InstructorDetail tempInstructorDetail = new InstructorDetail('www.vilma-
teaching.com/youtube', 'teaching');
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
session.beginTransaction();
System.out.println('Saving instructor: ' tempInstructor);
//this will also save the details object
//because of CascadeType.ALL
session.save(tempInstructor);
session.save(tempInstructorDetail);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
}
}
}
enter code here
public class DeleteDemo {
public static void main(String[] args) {
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
session.beginTransaction();
int theId = 2;
Instructor tempInstructor = session.get(Instructor.class, theId);
System.out.println('Found instructor: ' tempInstructor);
if(tempInstructor != null){
System.out.println('Deleting: ' tempInstructor);
//will also delete associated details obj (Cascade)
session.delete(tempInstructor);
}
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
enter code here
public class HibernateUtil {
private static SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() {
if (sessionFactory == null) {
try {
Configuration configuration = new Configuration();
// Hibernate settings equivalent to hibernate.cfg.xml's properties
Properties settings = new Properties();
settings.put(Environment.DRIVER, '');
settings.put(Environment.URL, '');
settings.put(Environment.USER, '');
settings.put(Environment.PASS, '');
settings.put(Environment.DIALECT, 'org.hibernate.dialect.MySQL5Dialect');
settings.put(Environment.SHOW_SQL, 'true');
settings.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, 'thread');
configuration.setProperties(settings);
configuration.addAnnotatedClass(Instructor.class);
configuration.addAnnotatedClass(InstructorDetail.class);
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Exception e) {
e.printStackTrace();
}
}
return sessionFactory;
enter code here
uj5u.com熱心網友回復:
InstructorDetail 類也需要進行級聯,因為它應該是雙向的。
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "instructor_id")
private Instructor instructor;
并為講師創建 setter 和 getter。我希望這會奏效
uj5u.com熱心網友回復:
在創建物體時應該有雙向映射。在講師詳細資訊中創建以下屬性并為其創建 getter 和 setter。
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "instructor_id")
private Instructor instructor;
在講師詳細資訊物體中創建以下函式
public void add(Instructor instructor) {
this.instructor = instructor;
instructor.setInstructorDetail(this)
}
在創建講師時,使用與講師物件相關的講師詳細資訊物件呼叫上述函式,例如,
instructorDetail.add(instructor);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/417589.html
標籤:
