월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계와 연관관계의 주인 2 -주의점, 정리
안녕하십니까 선생님 다름이아니오라 em.flush(), em.clear()를 했을 때와 안했을 때 query를 호출하는 경우와 호출되지 않는 경우에 대해서 이해가 잘 되지 않아 질문드립니다. Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setUsername("member1"); member.setTeam(team); em.persist(member); em.flush(); em.clear(); Team findTeam = em.find(Team.class, team.getId()); List<Member> members = findTeam.getMembers(); for (Member m : members) { System.out.println("m = " + m.getUsername()); } tx.commit(); 위 코드에서em.flush(); em.clear();를 했든 안했든 findTeam.getMembers(); 은 비어있는 상태 아닌가요..?둘다 비어있는 상태인데 했을 경우에는 query를 사용하고 안했을 경우에는 query를 호출하지 않는 이유가 궁금합니다.members 객체가 flush를 했을 때는 프록시 객체고 하지 않았을 경우는 실제 객체라서 그런걸까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
member 만 persist 했는데 ITEM 에도 데이터 삽입되는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 수업 듣던중 궁금한 것이 생겨 질문 남깁니다!member만 persist 했는데 ITEM 에도 데이터가 인서트 되는 것은 JPA가 상속관계임을 인지하고 알아서 값을 넣어주는 건가요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Unable to build Hibernate SessionFactory오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]10월 16, 2023 11:17:27 오후 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformationINFO: HHH000204: Processing PersistenceUnitInfo [name: hello]10월 16, 2023 11:17:27 오후 org.hibernate.Version logVersionINFO: HHH000412: Hibernate ORM core version 6.3.0.Final10월 16, 2023 11:17:27 오후 org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl lambda$normalizeConnectionAccessUserAndPass$6WARN: HHH90000021: Encountered deprecated setting [javax.persistence.jdbc.user], use [jakarta.persistence.jdbc.user] instead10월 16, 2023 11:17:27 오후 org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl lambda$normalizeConnectionAccessUserAndPass$12WARN: HHH90000021: Encountered deprecated setting [javax.persistence.jdbc.password], use [jakarta.persistence.jdbc.password] instead10월 16, 2023 11:17:27 오후 org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl normalizeDataAccessWARN: HHH90000021: Encountered deprecated setting [javax.persistence.jdbc.url], use [jakarta.persistence.jdbc.url] instead10월 16, 2023 11:17:27 오후 org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl normalizeDataAccessWARN: HHH90000021: Encountered deprecated setting [javax.persistence.jdbc.driver], use [jakarta.persistence.jdbc.driver] instead10월 16, 2023 11:17:27 오후 org.hibernate.cache.internal.RegionFactoryInitiator initiateServiceINFO: HHH000026: Second-level cache disabled10월 16, 2023 11:17:27 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configureWARN: HHH10001002: Using built-in connection pool (not intended for production use)10월 16, 2023 11:17:27 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001005: Loaded JDBC driver class: org.h2.Driver10월 16, 2023 11:17:27 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001012: Connecting with JDBC URL [jdbc:h2:tcp://localhost/~/jpashop]10월 16, 2023 11:17:27 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001001: Connection properties: {password=****, user=sa}10월 16, 2023 11:17:27 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001003: Autocommit mode: false10월 16, 2023 11:17:27 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>INFO: HHH10001115: Connection pool size: 20 (min=1)10월 16, 2023 11:17:27 오후 org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl constructDialectWARN: HHH90000025: H2Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)10월 16, 2023 11:17:29 오후 org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateServiceINFO: HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)10월 16, 2023 11:17:29 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnectionINFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@5dc769f9] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.10월 16, 2023 11:17:29 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptionsWARN: SQL Error: 42122, SQLState: 42S2210월 16, 2023 11:17:29 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptionsERROR: Column "start_value" not found [42122-214]10월 16, 2023 11:17:29 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stopINFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/jpashop]Exception in thread "main" jakarta.persistence.PersistenceException: [PersistenceUnit: hello] Unable to build Hibernate SessionFactory at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1563) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1484) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:55) at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:80) at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) at jpashose.jpashop.JpaMain.main(JpaMain.java:12)Caused by: org.hibernate.exception.SQLGrammarException: Unable to build DatabaseInformation [Column "start_value" not found [42122-214]] [n/a] at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:66) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:58) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94) at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:194) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:98) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:286) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:145) at java.base/java.util.HashMap.forEach(HashMap.java:1337) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:142) at org.hibernate.boot.internal.SessionFactoryObserverForSchemaExport.sessionFactoryCreated(SessionFactoryObserverForSchemaExport.java:37) at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:295) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:450) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1479) ... 4 moreCaused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "start_value" not found [42122-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) at org.h2.message.DbException.get(DbException.java:223) at org.h2.message.DbException.get(DbException.java:199) at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) at org.h2.jdbc.JdbcResultSet.getLong(JdbcResultSet.java:745) at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.resultSetStartValueSize(SequenceInformationExtractorLegacyImpl.java:110) at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.lambda$extractMetadata$0(SequenceInformationExtractorLegacyImpl.java:54) at org.hibernate.tool.schema.extract.spi.ExtractionContext.getQueryResults(ExtractionContext.java:50) at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:39) at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.initializeSequences(DatabaseInformationImpl.java:66) at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.<init>(DatabaseInformationImpl.java:60) at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:185) ... 14 moreh2설정후 main돌려보면 자꾸 이런식으로 뜹니다 재설치도 많이해봤고 강의와 같은버젼으로 돌렸는데도 오류가 발생하는데왜이러죠 >?? public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");EntityManager em = emf.createEntityManager();EntityTransaction tx = em.getTransaction();tx.begin();try { tx.commit(); } catch (Exception e) { tx.rollback();}finally {em.close();} emf.close();}} 이건 main코드입니다
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
버전 오류
현재 하이버네이트와 H2데이터베이스 버전 설정오류가 뜹니다.해결 방법을 알 수 있을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
다대다 관계의 주인
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 8분20초 다대다 관계 설명을 듣다 궁금한점이 생겨 질문 올립니다. 다대다 양방향 관계에서는 주인을 어떤 원리로 정하는 것인가요?? 강사님께서 items 를 다대다 양방향 연관관계의 주인으로 설정하셨는데 그 원리가 궁금합니다!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
jpa 시작하기 애플리케이션 개발 부분
제가 지금 jpamain 을 추가하고 실행을 시켰는데 해당 에러가 뜹니다
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
페치 조인 질문있습니다!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]컬렉션의 필요성에 대해 질문 좀 드리겠습니다 - 인프런 | 질문 & 답변 (inflearn.com) 여기서 궁금한 내용있습니다!. 1)"생각하신 내용이 맞습니다. 중간 테이블을 중심으로 조회가 가능하다면 크게 문제가 없습니다. 하지만 때때로 중간 테이블을 중심으로 조회하기 어려운 경우들도 있습니다." 김영한 강사님의 답변 내용 중에 떄떄로 중간 테이블을 중심으로 조회하기 어려운 경우가 어떤 경우인지 구체적으로 알려주실수 있나요?? 일단 다대다=>중간테이블 필요=>성능 최적화 필요하면=>중간테이블에 해당하는 리포지토리 생성후 (Spring data JPA에서) @Query(fetch join)사용하는식으로=> 맨날 이런식으로 했었는데 중간 테이블 중심으로 조회하기 어려운 경우가 어떤 경우인지 궁금합니다. 2)BatchSize를 사용하는 경우 일대다의 일의 collection에 해당하는 다( members) 를 일의 BatchSize에 해당하는만큼 가지고 오지 않습니까? for (Team team : teams) { System.out.println("team:"+team.getName()); for(Member mem:team.getMembers()){ System.out.println(mem.getUsername()); } }여기서는 성능 최적화가 이해가 됩니다!.team이 붙어있으므로 배치 사이즈만큼만은 mem.getUsername()이 호출되어도 또 그때동안은 쿼리가 안나가니깐요.근데 궁금한게 IN 쿼리에 들어가는게 BatchSIze만큼의 TeamID인데 연속한 ID만큼 나가는 걸로 알고 있는데 위처럼 연속한 경우는 몰라도, Team을 이것저것 조회하고 그에 대한 member의 메서드를 호출하면 이게 성능상 좋은가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@JoinColumn 엔티티 객체 반환
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); //persistence.xml에 설정한 UnitName을 인자로 넣어주면 해당 persistence.xml 읽어서 // 팩토리 생성 완료. (내부적으로 jdbc 써서 DB와의 connection도 완료된 상태) EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try{ Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setUsername("member1"); member.setTeam(team); em.persist(member); em.flush(); em.clear(); ///////////////////////////////////////////// Member findMember = em.find(Member.class, member.getId()); Team findTeam = findMember.getTeam(); System.out.println(findTeam.getName()); tx.commit(); } catch(Exception e) { tx.rollback(); } finally { em.close(); } 수업 듣다가 궁금한 점이 생겨 질문 남깁니다! em.clear() 하면 영속성 컨텍스트 초기화 되니까그 다음 em.find() 는 DB서버에 쿼리문 날려서내부적으로 객체 필드 초기화해서 반환합니다. 그런데 DB에는 TEAM_ID 컬럼에 그냥 숫자가 들어가있는데 어떻게 findMember의 Team 필드가 해당하는 Team객체로초기화 될 수 있었던건가요?? <가설>/////////////////////////////////////////// 표시한 부분 바로 아래의 Member findMember = em.find(Member.class, member.getId()); Member 엔티티 객체의 team 필드와 Member 테이블의TEAM_ID가 @JoinColumn 연관 관계 및 FK 설정 되어있다. referencedColumnName 의 default 값으로 인해MEMBER 테이블의 FK가 TEAM 테이블의 PK를 참조한다. em.find(Member.class, member.getId()); 하면JPA가 TEAM_ID(FK)로 MEMBER 와 TEAM을 JOIN해서얻은 데이터로 원하는 Member 객체와 연결된 Team 객체를 초기화할 수 있다. Team 객체 초기화한 것을 Member 객체의 team 필드에넣어서 Member 객체 초기화를 완료한다. 이를 반환한다. 이렇게 생각하는 것이 맞는건가요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
cascade = CascadeType.ALL을 설정하지 않고, orphanRemoval = true만 설정하였을때 DELETE 쿼리가 나가지 않는 이유
@Entity public class Parent { @OneToMany(mappedBy = "parent", orphanRemoval = true) private List<Child> childList = new ArrayList<>(); public void addChild(Child child) { childList.add(child); child.setParent(this); } }부모객체의 cascade는 설정하지 않고, orphanRemoval옵션만 true로 설정하였습니다.Child child1 = new Child(); Child child2 = new Child(); Parent parent = new Parent(); parent.addChild(child1); parent.addChild(child2); em.persist(parent); em.persist(child1); em.persist(child2); em.flush(); em.clear(); Parent findParent = em.find(Parent.class, parent.getId()); findParent.getChildList().remove(0); tx.commit();cascade = CascadeType.ALL을 설정하지 않았으므로 parent, child1, child2 모두 persist해주었고,영속성 컨테이너를 비운 다음 find로 DB에서 데이터를 가져와 findParent 객체를 만든 후, 0번 인덱스의 child1를 제거하였습니다.여기서 부모와의 연관관계가 끊어진 child1은 DB에서 삭제될 것으로 생각하였습니다. 하지만데이터가 아직 존재하는걸 확인하였습니다. [추가] em.flush를 마지막에 넣어주면 삭제가 되는 것을 확인하였습니다. 그냥 commit과 commit전에 flush를 한번 더 해주는 것과 어떤 차이가 있는 걸까요..?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
추천수를 구현할 경우
게시판을 보면 한 질문에 몇명이 추천했는지 볼수있다.인프런을 예로들면 따봉수를 말할수 있겠죠이런건 한사람이 여려 질문에 추천가능하고, 질문 하나에 여러 사람이 추천할 수 있으니 다대다 관계로 풀 수 있다고 생각합니다.코드로 풀어보면 아래와 같이 쓸수 있다고 생각합니다.@Getter @Setter @Entity public class Question { @ManyToMany Set<SiteUser> voter; }한사람당 하나의 질문에는 딱한번 추천이 가능하니 Set로 사용자ID를 두고 다대다관계로 풀었습니다.추천수는 필드를 추가할 일도 없으니 굳이 연결엔티티를 만들어야 하는지 궁금합니다.실무에서는 이런경우에도 연결 엔티티를 만들어서 다대다관계를 일대다, 다대일 관계로 푸나요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
No Persistence provider for EntityManager named hello ? 오류
실행하면 저렇게 오류가 발생해요 ㅠㅠ <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"> <persistence-unit name="hello"> <properties> <!-- 필수 속성 --> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="javax.persistence.jdbc.user" value="sa"/> <property name="javax.persistence.jdbc.password" value=""/> <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <!-- 옵션 --> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.use_sql_comments" value="true"/> <!--<property name="hibernate.hbm2ddl.auto" value="create" />--> </properties> </persistence-unit> </persistence>이건 persistence.xml 이고 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>jpa-basic</groupId> <artifactId>ex1-hello-jpa</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- JPA 하이버네이트 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.6.15.Final</version> </dependency> <!-- h2 데이터베이스 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.200</version> </dependency> <!-- Java 9 이상을 지원하는 JAXB API 라이브러리 --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> </dependencies> </project>이건 pom.xml 입니다 뭐가 틀린건가요? ㅠㅠ...
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
1:1 연관관계
1:1 연관관계인 두 엔티티가 존재할 경우, 사실 1개의 테이블로 관리할 수 있고, 2개의 테이블 분리해서 관리할 수 있는데, 두 엔티티를 분리하는게 더 나을 것 같아서 2개의 엔티티로 분리하는 걸까요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
일대일 대상 테이블에 외래키 단방향 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]비지니스적으로 많이 사용되는 빈도를 기준으로 MEMBER가 주 테이블, LOCKER가 대상 테이블이라고 이해하였습니다.위 그림에서 LOCKER(대상 테이블)에 외래 키가 있고, Member객체가 Locker 객체를 참조하고 있으므로 Member객체가 연관 관계의 주인이 됩니다. 그런데, LOCKER 테이블에 외래 키가 있으므로 연관 관계의 주인은 Locker객체가 되어야 하지 않나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 전이
영속성 전이를 사용해야할 경우에 대해서 2가지 조건을 언급하셨는데,1) 단일 소유자일 때2) parent와 child의 lifecycle이 유사할 때, 그러면, 영속성 전이가 필요 없는 경우는게시판에서 글과 댓글이 있을 때, 글과 댓글이 생명주기가 같지 않을 경우, 예를 들어, 글이 삭제되었어도, 데이터 수집을 위해 댓글은삭제되지 않는 다는 정책이 있다면, 굳이 영속성 전이가 필요없을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPQL DB 바로 조회
JPQL를 데이터를 조회하면, DB에 먼저 조회한 후, 영속성 컨텍스트에 이미 동일한 엔티티가 있으면, DB에서 조회한 데이터를 버리고, 이미 있는 엔티티를 반환한다고 알고 있습니다.만약, 기존 엔티티를 새로 검색한 엔티티로 대체한다면, 영속성 컨텍스트에 수정 중인 데이터가 사라질 수 있어, 위험하다고 하는데, 그러면, 조회시 수정 중인 데이터가 조회되어서, 의도치 않는 데이터가 조회될 수 있지 않나요? 오히려 수정 중인 데이터 대신 새로 조회한 데이터로 대체하는게 좋지 않을까 싶은데, 혹시, DB에서 조회한 데이터를 버리고, 이미 있는 엔티티를 반환하는게 더 장점인 구체적인 예시가 있을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 전이 관련해서 궁금한 점이 있습니다.
Child child1 = new Child(); Child child2 = new Child(); Parent parent = new Parent(); child1.setParent(parent); // 필수? child2.setParent(parent); // 필수? parent.getChildren().add(child1); parent.getChildren().add(child2); em.persist(parent); Parent와 Child 가 양방향 관계일 때,cascade를 persist 설정을 해줄 경우, 1번의 persisten 호출로 child와 parent 를 DB에 저장하는 것 뿐이지, 서로가 서로를 set은 해줘야 하는 건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
실무에서 비교적 자주 사용될 수 있는 연관관계
강의와 책 종합해서 정리하면,실무에서 비교적 자주 사용될 수 있는 연관관계는1:1 - 단방향, 양방향다:1 - 단방향, 양방향밖에 없는 것 같은데, 맞을까요? 다:다는 일대다, 다대일로 관계를 풀어야 하고,1:다의 단방향은 이상한 구조이고,1:다의 양방향은 존재하지 않고, 대신 다:1 양방향 매핑을 사용해서, 결국 위와 같은 연관관계만 남는게 아닌가 싶어서 여쭤봅니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
연관관계 주인 정하기
다:1, 1:다, 1:1, 다:다 등 어느 경우든지 간에 양방향 관계라면, 연관 관계의 주인을 정해야 하는 건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
준영속상태로 변경된 엔티티의 관리
엔티티의 생명주기 공부하다 궁금한점이 있습니다.준영속상태로 변경된 경우, 엔티티는 계속 메모리에 올라와 있나요? 아니면 CG 처럼 누군가가 불필요하다고 판단되면 엔티티를 삭제 하나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
프로젝트 생성, 설정..
프로젝트 생성부터 막히네요 ㅜㅜ 이렇게 생성했고, 이렇게 오류가 발생했습니다.. ㅠㅠ 왜그런걸까요? 그리고, 강의에는 h2 설치는 나오는데 하이버네이트에 대한건 버전에 대한 설명만 있던데.. 설치도 따로 해줘야하는건가요??? ㅠ