āđ‚āļ„āđ‰āļ”āļĒāļīāļĄ/āļŦāļĨāļąāļāļŠāļđāļ•āļĢāļˆāļēāļ§āļē/All lectures for TH purposes/āļāļēāļĢāļ—āļ”āļŠāļ­āļšāļĢāļŦāļąāļŠāđ„āļŪāđ€āļšāļ­āļĢāđŒāđ€āļ™āļ•

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāļĢāļŦāļąāļŠāđ„āļŪāđ€āļšāļ­āļĢāđŒāđ€āļ™āļ•

āļĢāļ°āļ”āļąāļš, āļšāļ—āđ€āļĢāļĩāļĒāļ™
āļĄāļĩāļ­āļĒāļđāđˆ

āļāļēāļ™āđƒāļ™āļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģāđāļĨāļ°āļāļēāļĢāļ—āļ”āļŠāļ­āļš

āđāļĨāļ°āļ•āļ­āļ™āļ™āļĩāđ‰āļ—āļĩāđˆāļ™āđˆāļēāļŠāļ™āđƒāļˆāļ—āļĩāđˆāļŠāļļāļ” āđ€āļĄāļ·āđˆāļ­āļ—āļ”āļŠāļ­āļšāļĢāļŦāļąāļŠ Hibernate āļšāđˆāļ­āļĒāļ„āļĢāļąāđ‰āļ‡āļ—āļĩāđˆāļ„āļļāļ“āđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļāļąāļšāļāļēāļ™āļˆāļĢāļīāļ‡ āđāļ•āđˆāļāļąāļšāđ‚āļ„āļĢāļ‡āļĢāđˆāļēāļ‡āļšāļēāļ‡āļ›āļĢāļ°āđ€āļ āļ—āļ—āļĩāđˆāđƒāļŠāđ‰āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļąāđ‰āļ™āļ•āđˆāļģ

āļ„āļļāļ“āļ™āļķāļāļ āļēāļžāđ‚āļ„āļĢāļ‡āļ—āļĩāđˆāđƒāļŠāđ‰āļĄāļēāļ•āļĢāļāļēāļ™ SQL Server āļŠāđˆāļ§āļ™āđƒāļŦāļāđˆāđ„āļ”āđ‰āļŦāļĢāļ·āļ­āđ„āļĄāđˆ āļ‰āļąāļ™āđ„āļĄāđˆ. āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄ āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ™āļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģāļ™āļąāđ‰āļ™āļĒāļ­āļ”āđ€āļĒāļĩāđˆāļĒāļĄāļĄāļēāļ āļĄāļąāļ™āļ—āļģāļ‡āļēāļ™āļ›āļĢāļ°āļĄāļēāļ“āļ™āļĩāđ‰:

  • āđƒāļ™āđ€āļĄāļ˜āļ­āļ” @BeforeAll āđ€āļĢāļēāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ™āļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģ
  • āđƒāļ™āđ€āļĄāļ˜āļ­āļ” @BeforeEach āđ€āļĢāļēāđ„āļ”āđ‰āļĢāļąāļšāđ€āļ‹āļŠāļŠāļąāļ™āđāļĨāļ°āđ€āļ›āļīāļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ
  • āđƒāļ™āđ€āļĄāļ˜āļ­āļ” @Test āđ€āļĢāļēāļ—āļģāļ‡āļēāļ™āļāļąāļšāđ€āļ‹āļŠāļŠāļąāļ™āđāļĨāļ°āļ˜āļļāļĢāļāļĢāļĢāļĄāļ›āļąāļˆāļˆāļļāļšāļąāļ™
  • āđƒāļ™āđ€āļĄāļ˜āļ­āļ” @AfterEach āđ€āļĢāļēāļ—āļģāļ˜āļļāļĢāļāļĢāļĢāļĄ
  • āđāļĨāļ°āļŠāļļāļ”āļ—āđ‰āļēāļĒ āđƒāļ™āđ€āļĄāļ˜āļ­āļ” AfterAll āđ€āļĢāļēāļ›āļīāļ”āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļāļąāļšāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ

āļ™āļĩāđˆāļ„āļ·āļ­āļĨāļąāļāļĐāļ“āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļ•āļĢāļĩāļĒāļĄāļ•āļąāļ§āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ—āļ”āļŠāļ­āļš:

@Test
public class HelloTest {
  private static SessionFactory sessionFactory = null;
  private Session session = null;

  @BeforeAll
  static void setup(){
    try {
  	StandardServiceRegistry standardRegistry  = new StandardServiceRegistryBuilder()
      	.configure("hibernate-test.cfg.xml").build();

  	Metadata metadata = new MetadataSources(standardRegistry)
      	.addAnnotatedClass(Employee.class)
      	.getMetadataBuilder()
      	.build();

      sessionFactory = metadata.getSessionFactoryBuilder().build();

    } catch (Throwable ex) {
        throw new ExceptionInInitializerError(ex);
    }
  }

  @BeforeEach
  void setupThis(){
      session = sessionFactory.openSession();
      session.beginTransaction();
  }

  @AfterEach
  void tearThis(){
      session.getTransaction().commit();
  }

  @AfterAll
  static void tear(){
      sessionFactory.close();
  }

āđāļĨāļ°āļ™āļĩāđˆāļ„āļ·āļ­āļĨāļąāļāļĐāļ“āļ°āļ‚āļ­āļ‡āļāļēāļĢāļ—āļ”āļŠāļ­āļšāļ”āđ‰āļ§āļĒāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡ Hibernate:

@Test
public class HelloTest {

  @Test
  void createSessionFactoryWithXML() {
       Employee emp = new Employee();
       emp.setEmail("demo-user@mail.com");
       emp.setFirstName("demo");
       emp.setLastName("user");

       Assertions.assertNull(emp.getEmployeeId());
       session.persist(emp);
       Assertions.assertNotNull(emp.getEmployeeId());
  }
}

āļ‚āđ‰āļ­āļĄāļđāļĨāļāļēāļĢāļ—āļ”āļŠāļ­āļš

āļ„āļļāļ“āļĒāļąāļ‡āļŠāļēāļĄāļēāļĢāļ–āđ€āļ•āļīāļĄāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļ”āļŠāļ­āļšāļ‚āļ­āļ‡āļ„āļļāļ“āļ”āđ‰āļ§āļĒāļ‚āđ‰āļ­āļĄāļđāļĨāļāļēāļĢāļ—āļ”āļŠāļ­āļš

āđ‚āļ”āļĒāļ›āļāļ•āļīāļˆāļ°āļĄāļĩāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ„āļŸāļĨāđŒ sql āļŠāļ­āļ‡āđ„āļŸāļĨāđŒāļŠāļģāļŦāļĢāļąāļšāļŠāļīāđˆāļ‡āļ™āļĩāđ‰:

  • schema.sql āļĄāļĩāļŠāļ„āļĢāļīāļ›āļ•āđŒāļ—āļĩāđˆāļŠāļĢāđ‰āļēāļ‡āļ•āļēāļĢāļēāļ‡āđƒāļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ
  • test-data.sql āļĄāļĩāļŠāļ„āļĢāļīāļ›āļ•āđŒāļ—āļĩāđˆāđ€āļ•āļīāļĄāļ•āļēāļĢāļēāļ‡āļ”āđ‰āļ§āļĒāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļ”āļŠāļ­āļš

āđ‚āļ”āļĒāļ›āļāļ•āļīāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ•āļēāļĢāļēāļ‡āđāļĨāļ°āļ‚āđ‰āļ­āļĄāļđāļĨāļāļēāļĢāļ—āļ”āļŠāļ­āļšāļˆāļ°āđāļĒāļāļ­āļ­āļāđ€āļ›āđ‡āļ™āđ„āļŸāļĨāđŒāļ•āđˆāļēāļ‡āđ† āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāļāļĨāļļāđˆāļĄāļ‚āđ‰āļ­āļĄāļđāļĨāļāļēāļĢāļ—āļ”āļŠāļ­āļšāļ‚āļ­āļ‡āļ•āļ™āđ€āļ­āļ‡āļŠāļģāļŦāļĢāļąāļšāļāļĨāļļāđˆāļĄāļāļēāļĢāļ—āļ”āļŠāļ­āļšāļ•āđˆāļēāļ‡āđ† āļĄāļąāļāļˆāļ°āļ›āļĢāļēāļāļāļ‚āļķāđ‰āļ™āđ€āļŠāļĄāļ­

āļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļŸāļĨāđŒāđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āļĄāļĩāļĨāļąāļāļĐāļ“āļ°āļ”āļąāļ‡āļ™āļĩāđ‰:

void runSqlScriptFile(String filePath){
  	String sqlScript = new String( Files.readAllBytes(Paths.get(filePath)) );
  	Session session = sessionFactory.openSession();
      Query query = session.createNativeQuery("BEGIN " + sqlScript + " END;");
      query.executeUpdate()
}

āđāļĨāļ° āļ§āļīāļ˜āļĩ āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļē āļ‚āļ­āļ‡āļ„āļļāļ“ āļˆāļ°āđ€āļ›āļĨāļĩāđˆāļĒāļ™āđ„āļ›āđ€āļĨāđ‡āļāļ™āđ‰āļ­āļĒ:

@BeforeAll
static void setup(){
  try {
	StandardServiceRegistry standardRegistry  = new StandardServiceRegistryBuilder()
    	.configure("hibernate-test.cfg.xml").build();

	Metadata metadata = new MetadataSources(standardRegistry)
    	.addAnnotatedClass(Employee.class)
    	.getMetadataBuilder()
    	.build();

	sessionFactory = metadata.getSessionFactoryBuilder().build();
	runSqlScriptFile(“scema.sql”);
	runSqlScriptFile(“test-data.sql”);

  } catch (Throwable ex) {
      throw new ExceptionInInitializerError(ex);
  }
}
āļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™
  • āđ€āļ›āđ‡āļ™āļ—āļĩāđˆāļ™āļīāļĒāļĄ
  • āđƒāļŦāļĄāđˆ
  • āđ€āļāđˆāļē
āļ„āļļāļ“āļ•āđ‰āļ­āļ‡āļĨāļ‡āļŠāļ·āđˆāļ­āđ€āļ‚āđ‰āļēāđƒāļŠāđ‰āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™
āļŦāļ™āđ‰āļēāļ™āļĩāđ‰āļĒāļąāļ‡āđ„āļĄāđˆāļĄāļĩāļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™āđƒāļ” āđ†