월 16,940원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계에서의 remove 과정..
양방향 연관관계에서 연관관계 편의 메소드 라는 것을 만들어서 양쪽에 값을 모두 넣어주고 persist를 했었는데 반대로 엔티티를 삭제할때에도 삭제와 관련된 편의메소드를 생성해서 연관된 엔티티 (fk)에 null을 넣어주고 해당 엔티티를 em.remove 해야 하나요?? ex) member : post = 1 : n ==> member 삭제 시, post에 members list 에 있는 해당 member를 null값으로 설정하는 메소드
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPQL 로 작성한 문법 테스트 코드로 작성해 볼 수 있을까요?
안녕하세요. JPQL 로 쿼리를 작성하고 실제 데이터가 들어가는지 보려고 합니다. 우선, main 함수에서 직접 넣는거는 되는 것을 확인했습니다. 그리고 제가 해보고 싶었던거는 테스트 코드로 작성해보는 것이였습니다. 그런데 Bean을 못찾는다는 에러가 발생했습니다. 구글링도 해보고 빈 등록을 다양하게 해보면서 접근법을 다르게도 해봤는데 해결이 안되네요 ㅠㅠ 혹시 제 코드를 보시고 어디에 문제가 있는지 알 수 있을까요? 제가 작성한 코드입니다. [ JPQLRepository ] @Transactional @Repository public class JPQLMemberRepository implements MemberRepository{ @PersistenceContext private final EntityManager em; @Autowired public JPQLMemberRepository(EntityManager em) { this.em = em; } public EntityTransaction getTx() { return em.getTransaction(); } public Member save(Member member) { em.persist(member); return member; } public void emClose() { em.close(); } @Override public Optional<Member> findByid(Long id) { return Optional.empty(); } @Override public Optional<Member> findByname(String name) { List<Member> result = em.createQuery( "SELECT m FROM Member m WHERE m.name = :name", Member.class ).setParameter("name", name).getResultList(); System.out.println("--------------------------------"); for (Member i : result) { System.out.println("member:" + i); } System.out.println("--------------------------------"); return result.stream().findAny(); } } [ SpringConfig ] @Configuration public class SpringConfig { @Bean public EntityManagerFactory getEnf() { EntityManagerFactory emf = Persistence.createEntityManagerFactory("5xik"); return emf; } @Bean public EntityManager getEm() { return getEnf().createEntityManager(); } @Bean public MemberRepository memberRepository() { return new JPQLMemberRepository(getEm()); } } [ TestCode ] @SpringBootTest @Transactional class JPQLMemberRepositoryTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class); MemberRepository repository = ac.getBean("memberRepository",JPQLMemberRepository.class); EntityTransaction tx = repository.getTx(); @Test @Commit void insertData() { tx.begin(); try{ Member member = new Member(); member.setName("sungjun"); member.setPhonenumber("010"); repository.save(member); Optional<Member> result = repository.findByname(member.getName()); Assertions.assertThat(result).isEqualTo(member); tx.commit(); } catch (Exception e){ tx.rollback(); } finally { //repository.emClose(); } //ac.close(); } } 그리고 아직 close를 하는 부분은 구현을 안해놔서주석처리를 해놨습니다 !감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
17분25초쯤
mappedby="team" 아래에 있는 members랑 addMember메서드 아래에있는 members 둘이 서로 같은데 그전에 team.getMembers().add(member);를 할때 getMembers에서 members가 mappedby 읽기전용이라서 안된다고 하셨는데 그러면 addMember메서드에 있는 members도 읽기전용이라 add를 할때 적용이 안돼야 하는거 아닌가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
1차 캐시 조회중 오류 문의드립니다.
1차 캐시 조회 실습을 따라 하던 중 다음과 같은 오류 메세지와 함께 구하고자 하는 system.out,println 값이 나오지 않아 문의드립니다. 무엇 때문에 발생하는 오류인지 알 수 있을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
갑자기 build error가 나서 질문 드립니다.
갑자기 build 시에 이런 내용의 에러가 발생했습니다. "C:\Program Files\Java\jdk-11.0.15.1\bin\java.exe" -Dmaven.multiModuleProjectDirectory=C:\Users\sspure123\Desktop\jpa-basic "-Dmaven.home=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\plugins\maven\lib\maven3" "-Dclassworlds.conf=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\plugins\maven\lib\maven3\bin\m2.conf" "-Dmaven.ext.class.path=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\plugins\maven\lib\maven-event-listener.jar" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\lib\idea_rt.jar=64655:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\plugins\maven\lib\maven3\boot\plexus-classworlds-2.6.0.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\plugins\maven\lib\maven3\boot\plexus-classworlds.license" org.codehaus.classworlds.Launcher -Didea.version=2022.1.3[INFO] Scanning for projects...[WARNING] [WARNING] Some problems were encountered while building the effective model for jpa-basic:ex1-hello-jpa:jar:1.0.0[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 13, column 21[WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.[WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects.[WARNING] [INFO] ------------------------------------------------------------------------[INFO] BUILD FAILURE[INFO] ------------------------------------------------------------------------[INFO] Total time: 0.180 s[INFO] Finished at: 2022-07-28T22:29:49+09:00[INFO] ------------------------------------------------------------------------[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1][ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.[ERROR] Re-run Maven using the -X switch to enable full debug logging.[ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles:[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/NoGoalSpecifiedException Process finished with exit code 1 구글링을 통해 검색하여, maven 문제라는 것을 알았고, pom.xml을 통해 다음과 같은 코드를 추가하였는데도 문제가 해결되지 않았습니다ㅠㅠ <pluginRepositories> <pluginRepository> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> <releases> <updatePolicy>never</updatePolicy> </releases> </pluginRepository></pluginRepositories><repositories> <repository> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> </repository></repositories> 어떻게 해결해야 할까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
21분 28초 실행
코드를 실행 하게 되면 맨 위부터 순차적으로 create sequence hibernate_sequence start with 1 increment by 1 call next value for hibernate_sequence call next value for hibernate_sequence 이 코드들의 실행 결과가 team_id에 1이 들어가고, member_id 2가 들어가게 되는거 같은데 하나의 시퀀스를 서로가 같이쓰게 되는형태인거죠? 만약에 그렇다면 따로 시퀀스를 쓰게 하려면 어떻게 해야하나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
설계
실무에서 테이블 설계와 엔티티 설계,매핑 이런 작업은 개발자가 직접하는건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
이 말이 맞는 말인지 궁금합니다.
JPA 에서는 연관관계로 조인을 하면 자동으로 외래키와 매칭되는 테이블의 pk 를 찾아서 on 절을 설정해준다. 고로 "select m from Member m join Team t on m.team=t.id"는 연관관계로 조인하지 않았으므로 Join하기 위한 on절이 꼭 필요하다. 직접 돌려보니 맞는 것 같긴한데 궁금하여 질문드립니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
자바 ORM 표준 JPA 프로그래밍 기본 편 H2 Console연결이 되지 않습니다.
위의 방식을 실행해보았을때 해결을 할 수 없었고 localhost:8082?key=xxx으로 url을 주고 실행했을때도 똑같은 오류가 발생했습니다. 사용한 게시물의 내용은 https://atoz-develop.tistory.com/entry/H2-Database-%EC%84%A4%EC%B9%98-%EC%84%9C%EB%B2%84-%EC%8B%A4%ED%96%89-%EC%A0%91%EC%86%8D-%EB%B0%A9%EB%B2%95 https://www.inflearn.com/questions/22054 입니다. 코드를 처음 실행 시켰을때 발생한느 오류는 아래와 같습니다. 7월 27, 2022 9:28:53 오후 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation INFO: HHH000204: Processing PersistenceUnitInfo [ name: hello ...] 7월 27, 2022 9:28:54 오후 org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {5.3.10.Final} 7월 27, 2022 9:28:54 오후 org.hibernate.cfg.Environment <clinit> INFO: HHH000206: hibernate.properties not found 7월 27, 2022 9:28:54 오후 org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> INFO: HCANN000001: Hibernate Commons Annotations {5.0.4.Final} 7월 27, 2022 9:28:57 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!) 7월 27, 2022 9:28:57 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001005: using driver [org.h2.Driver] at URL [jdbc:h2:tcp://localhost/~/test] 7월 27, 2022 9:28:57 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001001: Connection properties: {user=sa} 7월 27, 2022 9:28:57 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001003: Autocommit mode: false 7월 27, 2022 9:28:57 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init> INFO: HHH000115: Hibernate connection pool size: 20 (min=1) 7월 27, 2022 9:28:57 오후 org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator initiateService WARN: HHH000342: Could not obtain connection to query metadata : null 7월 27, 2022 9:28:57 오후 org.hibernate.dialect.Dialect <init> INFO: HHH000400: Using dialect: org.hibernate.dialect.H2Dialect 7월 27, 2022 9:28:57 오후 org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl makeLobCreatorBuilder INFO: HHH000422: Disabling contextual LOB creation as connection was null 7월 27, 2022 9:28:57 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions WARN: SQL Error: 90149, SQLState: 90149 7월 27, 2022 9:28:57 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions ERROR: Database "C:/Users/eoeo7/test" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-199] Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:275) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:179) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:119) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:904) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:935) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at hellojpa.JpaMain.main(JpaMain.java:8) Caused by: org.hibernate.exception.GenericJDBCException: Error calling Driver#connect at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113) at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:118) at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:41) at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:58) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.addConnections(DriverManagerConnectionProviderImpl.java:363) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:282) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:260) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections$Builder.build(DriverManagerConnectionProviderImpl.java:401) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:112) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:75) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:100) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:246) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:94) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ... 14 more Caused by: org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database "C:/Users/eoeo7/test" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:678) 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.engine.Engine.throwNotFound(Engine.java:189) at org.h2.engine.Engine.openSession(Engine.java:72) at org.h2.engine.Engine.openSession(Engine.java:222) at org.h2.engine.Engine.createSession(Engine.java:201) at org.h2.server.TcpServerThread.run(TcpServerThread.java:175) at java.base/java.lang.Thread.run(Thread.java:833) at org.h2.message.DbException.getJdbcSQLException(DbException.java:624) at org.h2.engine.SessionRemote.done(SessionRemote.java:607) at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:143) at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:431) at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:317) at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:169) at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:148) at org.h2.Driver.connect(Driver.java:69) at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:38) ... 29 more 종료 코드 1(으)로 완료된 프로세스
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
5분58초쯤
새로 실행하게 되면 다시 다 생성된다고 하셨는데 엔티티매니저팩토리도 새로 생성되는건가요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
META-INF/persistence.xml 경로 오류 질문있습니다.
"HelloJPA 애플리케이션 개발" 영상에서 2분55초쯤main문에 EntityManagerFactory 객체를 생성하시고 실행할경우 정상적으로 동작되지만, 저는 아래와 같이 Could not find any META-INF/persistence.xml file in the classpath 오류 문구가 뜨면서 실행이 되질않습니다. 프로젝트 경로는 다음과 같습니다. pom.xml 코드는 아래와 같으며 persistance.xml 코드는 아래와 같습니다. JpaMain 클래스는 아래와 같습니다. Project Structure 메뉴에서 Project Setting 내부의 Modules와 Facets 설정을 보면 JPA Configuration Path도 정상적으로 설정 되어있는데도 오류가 나는 이유를 모르겠습니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 컬렉션에서 삭제가 궁금합니다.
강사님 강의 덕분에 스프링이 너무 재미있습니다. 1 대 다로 양방향 매핑한 두 엔티티가 있다고 가정하고 다 부분의 엔티티를 삭제할 때, 1의 엔티티의 컬렉션을 모두 순회해서 해당 데이터를 전부 찾은 다음 컬렉션에서 remove를 해야하는 것인가요? 순회를 하게 되면 속도가 느려지는 것 같아 걱정되고 궁금하여 질문을 남기게 되었습니다. 읽어주셔서 정말 감사합니다.!!!!!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
pom.xml 관련 문의
강의에서 배운대로 현재 버전에 맞추어 수정해서 파일을 수정했는데, 다음과 같은 오류 : { Cannot run program "C:\Program Files\Java\jdk-16.0.2\bin\java.exe" (in directory "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\bin"): CreateProcess error=2, 지정된 파일을 찾을 수 없습니다 } 가 뜨면서 build가 안되는 현상이 발생합니다. 혹시 제가 무엇을 잘못한건지 알 수 있을까요? 해당 파일 코드도 같이 첨부합니다. <?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>ex-hello-jpa</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>16</maven.compiler.source> <maven.compiler.target>16</maven.compiler.target> </properties> <dependencies> <!-- JPA 하이버네이트 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.6.10.Final</version> </dependency> <!-- H2 데이터베이스 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>2.1.214</version> </dependency> </dependencies></project>
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
하이버네이트에 관한 질문이있습니다!
하이버네이트가 JPA의 구현체라는 것은 알고있습니다. 그러면 강의 중에도 등장하는 영속성 컨텍스트, EntityManager 같은 개념들도 다 하이버네이트가 구현해놓은 것인지 궁금합니다! 감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
하이버네이트에서 지연 로딩된 객체의 필드가 null인 현상에 대해 질문드립니다
안녕하세요 좋은 강의 감사드립니다. 하이버네이트에서 지연 로딩 사용 시, 지연 로딩된 객체가 초기화 되었음에도 불구하고 필드 접근 시 null이 조회되는 현상에 대해서 질문드립니다. 간단하게 현상을 재현하면 다음과 같습니다. 위와 같이 Member가 Team을 지연 로딩으로 설정한 경우이며, 예시를 위해 Team의 name을 public으로 설정하였습니다. 그리고 다음 코드를 실행하면 발생하는 결과는 다음과 같습니다. 이와같은 오류의 원인을 찾아본 결과 stackoverflow에서 지연 로딩으로 설정된 Proxy 객체의 필드는 모두 null로 세팅한다고 얘기해주었습니다. 그러나 관련된 공식 자료를 찾아볼 수가 없어 정확한 작동 원리에 대해 알고 싶어 질문드립니다. 또한 비슷한 현상으로 스프링에서 Proxy 타입으로 생성된 Bean에 대해서는 내부 필드들을 null로 할당하는 것이 있습니다. 이는 공식 문서에 따르면 Spring AOP에서 메서드 실행 조인 포인트만 제공하며, 필드 가로채기에 대해서는 지원하지 않는다고 나와있었습니다. 혹시 지연 로딩된 프록시 객체의 필드가 null로 세팅되는 현상이 위와 관련있는 현상인지에 대해서도 궁금합니다. 관련된 스프링 공식문서는 다음과 같습니다. https://docs.spring.io/spring-framework/docs/3.0.x/spring-framework-reference/html/aop.html 또한 지연 로딩과 null 세팅에 관한 스택 오버플로우 링크는 다음과 같습니다. https://stackoverflow.com/questions/8945365/jpa-hibernate-proxy-not-fetching-real-object-data-sets-all-properties-to-null 너무 긴 질문 죄송합니다. 항상 감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 컨텍스트의 1차캐시가 갑자기 헷갈려서 질문이 하나 있습니다.
Team t = new Team(); em.persist(t); t.setName("teamA"); 이렇게 영속성 컨텍스트의 1차캐시에 t를 먼저 저장하고 t의 name을 "teamA"로 변경하였을 때 변경되는 것이 맞을까요? 코드로 돌려보니 변경되는 것 같긴한데 그래도 찜찜해서 여쭤봅니다. 변경되는 이유는 1차 캐시에 객체 t 자체가 있는거고 그 객체의 속성이 변경됐으니 1차 캐시에 있는 객체 t도 당연히 변경된 것이다. 맞을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
jpa 외래키에 대한 질문합니다..
보통의 제약조건을 걸때 아래코드처럼 거는걸로 아는데요.@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "courseSeq")private Course course;반면에, 제약조건을 걸지않고 long 타입의 시퀀스로 만든뒤@Column(columnDefinition = "bigint comment '과정 시퀀스'")private Long courseSeq;이런식으로 유저 시퀀스만으로 queryDsl로 조인걸어서 필요한 데이터만불러오는식이나 생성, 수정, 삭제시 해당엔티티 시퀀스만으로 처리하는식으로 써도되는지...정리하자면 jpa로 @manytoone 어노테이션을 쓰지않고 jpa를 써도 문제될게없는지 궁금해서 질문드립니다.답변 :: 안녕하세요. 최용호님, 공식 서포터즈 David입니다. 필요하다면 연관관계를 맺지 않고도 그렇게 사용하셔도 됩니다. 아래 글에서 그러한 형태로 사용하는 예를 보여줍니다. https://www.popit.kr/id%EB%A1%9C-%EB%8B%A4%EB%A5%B8-%EC%95%A0%EA%B7%B8%EB%A6%AC%EA%B2%8C%EC%9E%87%EC%9D%84-%EC%B0%B8%EC%A1%B0%ED%95%98%EB%9D%BC/ 이런식으로 답변이 달렸는데 영한님의 생각이 궁금하여 다시 질문드립니다..1. 현재 프로젝트를 하는입장에서 도메인 주도 설계방식을 쓰면 시퀀스만으로 매핑해도되는지..2. 실무를 하는 입장에서 어떤방식으로 적용하는게 더 이점이 많은지..
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
트랜잭션 밖에서 값을 수정했는데 왜 update 쿼리가 발생할까요?
위의 그림과 같이 트랜잭션을 시작하기 전에 데이터를 수정했는데 update 쿼리가 나가더라구요... 트랜젝션 밖에서는 값의 조회만 가능할 것 같은데 수정이 되는 이유가 궁금합니다!
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
fetch join 과 일반 join 에서 궁금한점 있습니다..
post와 user 가 다 대 일 관계이고, lazy로딩을 걸어놓은 상태에서, post와 연관된 user의 정보를 가져오고싶을때, 일반 join jpql : select u.nickName, u.age ... from Post p join p.user u; fetch join jpql : select p from Post join fetch p.user; 둘 다 n+1 문제를 예방할 수 있는 건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티와 값타입의 차이 중 의문점..
임베디드 타입 같은 값 타입은 여러 엔티티에서 공유를 하게 되면 위험하다고 하였습니다. 그런데 말씀해주신거와 같이 만약에 의도를 하여 공유하고자 했을 경우에는 임베디드 타입의 객체를 엔티티 객체로 변경해서 사용해야 한다고 하셨는데 왜 그런지 궁금합니다..