묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! Querydsl
안녕하세요 프로젝션 결과반환을 dto로 하는데 있어 질문을 드립니다
안녕하세요 현재 jpa 모든 강의를 듣고 토이프로젝트를 진행하고 있습니다 질문의 요지는 querydsl을 통해 dto로 조회할때 XXXtoMany 관계의 컬렉션을 함께 조회하고 싶어요 현재 제 상황은 이렇습니다 일기장에 일기를 쓰는데 질문을 통해 일기를 쓰는방식이라 일기장에 사용된 질문이 필요해요 Diary라는 엔티티가 있고 Question이라는 엔티티가 있는데 이 두 엔티티의 관계가 다대다 관계여서 가운데 DiaryItem이라는 엔티티를 두고 다이어리 페이지에 필요한 모든 정보를 한번에 조회하는것이 목적입니다 이런 방식으로 Diary엔티티를 조회할때와 마찬가지로 엔티티에 의존적이지 않게 dto로 받으면서 무한루프에 빠지지 않도록 필요한 정보만 받을 수 있도록 조회를 하는 방법이 궁금해 질문드립니다 같은 방식으로 DiaryDto가 아니라 Diary에 담은뒤 Controller에서 DiaryDto의 생성자를 통해 변환을 하면 정상적으로 값이 담겨 오는데 queryFactory의 fetch를 통해 직접 DiaryDto에 담으면 에러가 발생합니다ㅠㅠ 현재 이방식으로 쿼리를 실행해보면 query specified join fetching, but the owner of the fetched association was not present in the select list 라는 에러가 나옵니다... 어떤에러인지도 궁금하구요ㅠㅠ 도움부탁드립니다ㅎㅎ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
DI 방식
안녕하세요, 자바 코드로 스프링 빈 등록하기 강좌에서 질문이 있는데요! 세 가지 질문이 있습니다. 1. @Bean public MemberService memberService() { return new MemberService(MemberRepository()); } 이 뜻은 MemberService와 MemberRepository형의 객체가 의존 관계를 맺고 있다는 뜻이고, 따라서 당연히 MemberService에 가면 MemberRepository형의 멤버변수가 선언되어 있는 걸 볼 수 있는데, 스프링 설정 클래스에서 위와같이 의존관계를 넣어줬으니 MemberService에서는 더이상 @Autowired 어노테이션이 생성자에 필요가 없는 거라고 이해하면 될까요? 조금 더 종합적으로 살펴봤을 때, 컴포넌트 스캔 방식일때는 해당 클래스에서 @Autowired 로 주입받는 객체와의 의존관계를 명시하고 주입해줘야 하는 방법 밖에 없고, 이와 같이 직접 자바 코드로 설정파일 이용해 빈을 등록하는 방식에서는 방법 1 : 수업과 같이 설정클래스에서 위에 작성된 코드로 의존주입한다, 단 저런 방식으로 주입할 경우 MemberService에는 생성자에 @Autowired가 필요없어짐 방법 2 : @Bean public MemberService memberService() { return new MemberService(); } 로 작성하고 MemberService 클래스에서 필드나 생성자에 @Autowired로 MemberRespository 빈 객체 주입 명시 이렇게 두 가지 방법이 있는 것으로 이해하면 될까요? 2. 잠깐 지나가는 말씀으로 세터 메서드에 @Autowired가 붙는 방법을 알려 주셨는데, 세터 메서드는 개발자가 직접 호출하지 않아도 스프링이 알아서 호출해주나요? @Autowired가 붙은 생성자를 저희가 직접 호출해준적은 없는 거 같은데, 세터도 동일한지 궁금합니다. 즉 @Autowired를 멤버변수 필드나 세터나 생성자에 붙이면 개발자가 호출할 필요 없이 알아서 스프링이 자동호출도 해주고 의존객체도 연결해주는 것으로 이해해도 되는지요? 3. 의존 주입을 하는 객체(A)와, 주입을 받는 객체(B)는 모두 빈으로 등록되어야 하는지 궁금합니다. 주입되는 인자(A)는 꼭 빈으로 등록된 객체여야 오류가 안 난다는 것은 수업에서도 알려주셔서 명확히 기억이 나는데, 주입을 받는 객체(B)도 항상 빈으로 등록된 객체여야 하나요? 질문이 많고 긴데 읽어주셔서 감사합니다!
-
미해결코딩으로 학습하는 GoF의 디자인 패턴
상태패턴의 순환참조(Circular Reference) 는 사용해도 좋은 것인가요?
안녕하세요 ! 좋은 강의 만들어 주셔서 너무 재밌게 공부하고 있습니다 ! 상태 (State) 패턴 은 순환구조 (Circular Reference) 로 구성된 것으로 이해 하였습니다. 순환구조를 Code smell 로 표현하는 글들을 몇번 본적이 있습니다. 제가 기억하는 이유는 다음과 같습니다. * 메모리 누수 요인 (순환을 끊지 않는한) * 컴파일(빌드) 시, 순환구조 import 에러 (Java 에서는 정상 동작되는 것이 이상하게 생각 되었습니다) 개인적으로 Parent-Child 를 순환구조로 사용하면, 사용성이 너무 좋게 느껴졌습니다. (특히 탐색을 적게 하니까 더 좋았습니다.) 선생님께서는 순환구조를 어떻게 생각하시는지, 사용해도 되는지 궁금합니다 🙇♂️ (혹은 제가 상태 패턴을 순환구조로 잘 못 이해하고 있는걸까요? 🤔) 감사합니다.
-
해결됨예제로 배우는 스프링 입문 (개정판)
2022.01.07 의존성 주입 관련 제보
2022.01.07 기점 수업을 수강 중 강의에서 사용하시는 소스와 현재 소스 차이가 있어 안내드립니다. 기존에 PetRepository가 존재했지만, 01/05 기점으로 PetRepository가 제거된 상태입니다. 당황하지 마시고, 새로 샘플Repository 생성해서 주입하는걸 테스트 진행하면 될 것 같습니다.
-
미해결스프링 시큐리티
정적 파일들이 ignore 되지 않는 문제가 발생합니다..
이번 강의에서 web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations()); 코드가 존재함에도 static 파일들이 ignore 되지 않는 문제가 발생합니다. 깃 파일과 비교하고, 강의 다시 보며 체크해봤는데도 도무지 원인을 찾지 못하겠습니다. 찾아주시면 정말 감사하겠습니다. 소스는 https://github.com/aittaa/corespringsecurity-authorize 입니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티매니저와 영속성컨텍스트에 관해서
여러 질문 답변을 찾아보고 내용을 종합해서 이해해본 결과 엔티티매니저와 영속성컨텍스트에 관해서 제가 현재 이해하고 있는게 맞는지 확인 부탁드립니다 .. 엔티티 매니저 1. 언제 생성되나 엔티티 매니저의 빈 스코프는 request로 설정되어 있다. 스프링이 처음 의존성을 주입하는 단계에서 엔티티 매니저를 의존하는 다른 빈들은 실제 엔티티 매니저가 아닌 가짜 엔티티 매니저(프록시)를 주입 받는다. 고객의 요청이 오고 엔티티 매니저가 관련 로직을 실행해야 하는 시점에 가짜 엔티티 매니저는 해당 트랜잭션과 관련된 실제 엔티티 매니저를 호출해준다. 여러 빈들이 엔티티매니저에 의존하고 있을 때 같은 고객의 요청 안에서는 모두 같은 엔티티매니저를 반환받는다. 2. 몇 개가 생성되나 고객이 요청할 때마다 생성되고 요청이 끝나면 사라진다.고객의 요청이 동시에 100명이 오면 100개 10000명이 오면 10000개가 생성된다. 3. 영속성 컨텍스트와의 관계 엔티티 매니저가 트랜잭션을 실행하면 영속성 컨텍스트가 생성되고 트랜잭션이 종료되면 영속성 컨텍스트가 사라진다. 4. 궁금한 점 같은 트랜잭션이면 서비스, 리포지토리에서 사용하는 EntityManager가 모두 같은 영속성 컨텍스트에 접근하게 되기 때문에 스프링 환경에서는 엔티티매니저와 영속성 컨텍스트의 관계가 N:1이 될 수 있다고 설명해주셨는데요.답변 링크 같은 트랜잭션이면 같은 고객의 요청 안에서 이루어지고 있고 그렇다면 서비스, 리포지토리에서 사용하는 엔티티매니저는 모두 동일한 엔티티매니저이기 때문에 1:1 관계가 아닌가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
페치조인 질문드립니다.
앞에 강의에서 즉시로딩은 실무에서 절대 사용하면 안되고 무조건 지연로딩만 사용해야한다고 알려주셨는데요! 강의를 들으며 페치조인을 알아본결과 페치조인은 즉시로딩인데 왜 실무에서 많이 사용하는건가요??
-
미해결스프링 시큐리티
안녕하세요 강사님 강의에 나온 FilterChainProxy에 대해 질문이 있습니다.
추가 학습을 해 보았더니, 클라이언트로 부터 온 요청은 서블릿 필터가 받게 되고, 서블릿 필터가 처리할 수 없는? 요청은 DelegatingFilterProxy를 통해 스프링 Application Context에 등록된 필터 빈 으로 책임을 위임한다고 나와있는데요. 이때 FilterChainProxy가 서블릿 필터로 부터 DelegatingFilterProxy을 통해 역할을 위임받게 되는건가요? 그렇다면 FilterChainProxy가 위치한 곳은 Spring의 IoC컨테이너일텐데 어떻게 서블릿 컨테이너에 위치한 서블릿 필터가 스프링 컨테이너에 위치한 FilterChainProxy에 필터링 작업을 위임할 수 있게 되는지 궁금합니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
H2 DB tcp연결 불가
안녕하세요! 항상 강의 잘 듣고 있습니다. H2 DB Connection시 jdbc:h2:~/test 로 DB생성 및 접속이 되지만 jdbc:h2:tcp://localhost/~/test 로 접속 하려하면 다음 에러가 발생합니다. 1.4.199, 1.4.200 모두 같은 에러가 발생합니다. JPA로 연결 하기 전 순수 H2 디비 접속 시 발생하는 문제점입니다. 일단 아쉬운대로 persistence.xml의 jdbc.url을 <property name="javax.persistence.jdbc.url" value="jdbc:h2:~/test"/> 로 바꾸어 그냥 접속을 시도해 보았지만 다른 질문글에서 답변 하셨듯이 file이 locked 되었다고 하고 다른 커넥션을 끊거나 server mode를 활용하라는 에러가 발생합니다.. H2 삭제 후 재설치, test.mv.db 강제로 지우기 다 시도 해보았는데 계속 같은 문제가 발생합니다.. test말고 사용한 적이 없는 다른 db이름을 활용해도 같은 문제가 발생합니다. 복습중이라 과거에는 문제 없이 세팅했던 부분인데 어떤 상관이 있을 까요?? 감사합니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
현재 오류 질문드립니다 , connect error?.
=========에러 내용입니다================= 1월 03, 2022 4:40:34 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions ERROR: Connection is broken: "java.net.SocketTimeoutException: connect timed out: localhost" [90067-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:11) Caused by: org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:48) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) 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: Connection is broken: "java.net.SocketTimeoutException: connect timed out: localhost" [90067-199] at org.h2.message.DbException.getJdbcSQLException(DbException.java:617) at org.h2.message.DbException.getJdbcSQLException(DbException.java:427) at org.h2.message.DbException.get(DbException.java:194) at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:435) 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 Caused by: java.net.SocketTimeoutException: connect timed out at java.base/java.net.PlainSocketImpl.waitForConnect(Native Method) at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:107) at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242) at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224) at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.base/java.net.Socket.connect(Socket.java:608) at org.h2.util.NetUtils.createSocket(NetUtils.java:103) at org.h2.util.NetUtils.createSocket(NetUtils.java:83) at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:115) at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:431) ... 34 more Process finished with exit code 1 =============================== ===========현재소스입니다=============== package hellojpa;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.EntityTransaction;import javax.persistence.Persistence;import java.util.List;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 { //비영속 Member member = new Member(); member.setName("HelloJpa"); member.setId(101L); //영속 em.persist하면 db에 바로 날아가는 것이 아니라 영속성 컨텍스트안에 영속성으로 된다 //현재 1차 캐쉬에 저장되어있다 System.out.println("=========BEFORE ======"); em.persist(member); System.out.println("========AFTER========"); //영속성 컨택스트는 한 트랙젝션 단위로 이루어지기에 순간의 찰나에 따라서 변화한다 Member findMember = em.find(Member.class, 101L); tx.commit(); }catch (Exception e) { tx.rollback(); }finally { em.close(); } emf.close(); }} ============================ ===========메이븐 파일입니다============= <?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.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version> </dependency> <!-- JPA 하이버네이트 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.3.10.Final</version> </dependency> <!-- H2 데이터베이스 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.199</version> </dependency> </dependencies> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties></project> 현재 connect 에러라고 발생하는데 왜 이런지 모르겠습니다. 소스는 동일 한 것같습니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
Transactional
안녕하세요! jpa 수업듣고 혼자 공부하다가 궁금한 점이 생겨서 질문 남깁니다. @Repository@Transactional@RequiredArgsConstructorpublic class ItemRepositoryImpl implements itemRepository{ private final EntityManager em; @Override public void delete(Long itemId){// Item item=findOne(itemId);// em.remove(item); em.createQuery("delete from Item i where i.id = :id") .setParameter("id",itemId).executeUpdate(); } @RunWith(SpringRunner.class)@SpringBootTest@Transactionalpublic class ItemRepositoryTest { @Autowired ItemRepository itemRepository; @Autowired private EntityManager em; private User user; private Item item; @Test public void delete(){ Long itemId= itemRepository.save(item); System.out.println(itemId); itemRepository.delete(itemId);// 1) System.out.println(itemRepository.findOne(itemId).getId()); Assertions.assertEquals(null,itemRepository.findOne(itemId)); } 테스트코드를 이렇게 작성하는 경우에는 delete가 다시 rollback되고 테스트 코드에서 1) 부분에서 rollback이 되고 itemRepository.findOne(itemId)가 itemId로 나오던데 @Transactional가 잘못 적용된 것인가요? jpql을 사용하는 경우 flush가 일어나서 flush 과정에서 commit이 일어나고 테스트 코드에서는 이 commit때문에 rollback이 일어나는 것 같은데 제가 생각한 것이 맞나요? 만약 제가 생각한 것이 맞다면 테스트 코드 부분에 1)에서 롤백이 일어나서 테스크코드 delete 메소드에서 save(item)부분도 롤백이 되서 itemRepository.delete(itemId)를 한 이후에는 find해도 null이 나와야하는데 그대로 itemId가 나오는 이유가 뭘까요? 주석처리한 것처럼 em.remove를 사용하면 테스트에 성공하는데 그 이유는 뭘까요ㅜㅜ
-
미해결실전! 스프링 데이터 JPA
Cannot cast java.lang.String to java.time.LocalDateTime
@CreatedBy나 @LastModifedBy 설정에서 문제가 생기는 것 같습니다. @Entity@Getter@NoArgsConstructor@ToString(of = {"id", "name", "price"})public class Item extends BaseEntity { @Id @GeneratedValue @Column(name = "item_id") private Long id; private String name; private int price; private String title; private String filePath; public Item(String name, int price) { this(name, price, null, null); } public Item(String name, int price, String title, String filePath) { this.name = name; this.price = price; this.title = title; this.filePath = filePath; }} @Profile("local")@Component@RequiredArgsConstructorpublic class InitItem { private final InitItemService initItemService; @PostConstruct public void init() { initItemService.init(); } @Component @RequiredArgsConstructor static class InitItemService { private final ItemRepository itemRepository; @Transactional public void init() { for (int i = 0; i < 10; i++) { itemRepository.save( new Item("cat's tower" + i, (i + 1) * 50, "Cat's Tower v." + i, "img/catTower" + i + ".jpg")); } } } @EntityListeners(AuditingEntityListener.class)@MappedSuperclass@Getter@ToString(of = {"createdDate", "lastModifiedDate"})public class BaseTimeEntity { @CreatedDate @Column(updatable = false) private LocalDateTime createdDate; @LastModifiedDate private LocalDateTime lastModifiedDate;} @EntityListeners(AuditingEntityListener.class)@MappedSuperclass@Getter@ToString(of = {"createdBy", "lastModifiedBy"}, callSuper = true)public class BaseEntity extends BaseTimeEntity { @CreatedBy @Column(updatable = false) private LocalDateTime createdBy; @LastModifiedBy private LocalDateTime lastModifiedBy;} @SpringBootApplication@EnableJpaAuditingpublic class ShoppingmallApplication { public static void main(String[] args) { SpringApplication.run(ShoppingmallApplication.class, args); } @Bean public AuditorAware<String> auditorAware() { return () -> Optional.of(UUID.randomUUID().toString()); }} public class Item extends BaseTimeEntity를 하면 즉 @CreatedDate, @LastModifiedDate까지는 잘 작동하는데 @Bean을 설정 후 public class Item extends BaseEntity로 바꾸면 Cannot cast java.lang.String to java.time.LocalDateTime 오류가 터져서 검색으로 조금 알아봤더니 , mysql사용시 liquibase-core v.3.10.3에서 발생하는 문제이고 v.4.3.1로 변경하면 된다는 글을 찾았는데 프로젝트 내에서 liquibase는 없고 또, 다른 글에서는 number타입을 String타입으로 형변환 할 때 나타나는 오류라고 하는데 허접한 시도들을 해보았으나, 결국 저 코드에서 어떻게 손대야 될 지 모르겠어서 질문올립니다 :[ 아래는 오류코드 입니다. ㅡㅡㅡㅡㅡㅡㅡ오류코드 시작ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2022-01-02 18:31:31.498 ERROR 6928 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'initItem': Invocation of init method failed; nested exception is java.lang.ClassCastException: Cannot cast java.lang.String to java.time.LocalDateTime at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.14.jar:5.3.14] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.14.jar:5.3.14] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.2.jar:2.6.2] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[spring-boot-2.6.2.jar:2.6.2] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412) ~[spring-boot-2.6.2.jar:2.6.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) ~[spring-boot-2.6.2.jar:2.6.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.2.jar:2.6.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290) ~[spring-boot-2.6.2.jar:2.6.2] at com.example.shoppingmall.ShoppingmallApplication.main(ShoppingmallApplication.java:17) ~[classes/:na] Caused by: java.lang.ClassCastException: Cannot cast java.lang.String to java.time.LocalDateTime at java.base/java.lang.Class.cast(Class.java:3605) ~[na:na] at com.example.shoppingmall.entity.Item_Accessor_12rl31.setProperty(Unknown Source) ~[classes/:na] at org.springframework.data.mapping.model.InstantiationAwarePropertyAccessor.setProperty(InstantiationAwarePropertyAccessor.java:104) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.mapping.model.SimplePersistentPropertyPathAccessor.setProperty(SimplePersistentPropertyPathAccessor.java:127) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.mapping.model.SimplePersistentPropertyPathAccessor.setProperty(SimplePersistentPropertyPathAccessor.java:171) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.auditing.MappingAuditableBeanWrapperFactory$MappingMetadataAuditableBeanWrapper.lambda$setProperty$0(MappingAuditableBeanWrapperFactory.java:259) ~[spring-data-commons-2.6.0.jar:2.6.0] at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na] at org.springframework.data.auditing.MappingAuditableBeanWrapperFactory$MappingMetadataAuditableBeanWrapper.setProperty(MappingAuditableBeanWrapperFactory.java:259) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.auditing.MappingAuditableBeanWrapperFactory$MappingMetadataAuditableBeanWrapper.setCreatedBy(MappingAuditableBeanWrapperFactory.java:204) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.auditing.AuditingHandlerSupport.touchAuditor(AuditingHandlerSupport.java:169) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.auditing.AuditingHandlerSupport.lambda$touch$0(AuditingHandlerSupport.java:136) ~[spring-data-commons-2.6.0.jar:2.6.0] at java.base/java.util.Optional.map(Optional.java:265) ~[na:na] at org.springframework.data.auditing.AuditingHandlerSupport.touch(AuditingHandlerSupport.java:134) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.auditing.AuditingHandlerSupport.markCreated(AuditingHandlerSupport.java:114) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.auditing.AuditingHandler.markCreated(AuditingHandler.java:92) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.jpa.domain.support.AuditingEntityListener.touchForCreate(AuditingEntityListener.java:92) ~[spring-data-jpa-2.6.0.jar:2.6.0] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.hibernate.jpa.event.internal.ListenerCallback.performCallback(ListenerCallback.java:55) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.jpa.event.internal.CallbackRegistryImpl.callback(CallbackRegistryImpl.java:97) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.jpa.event.internal.CallbackRegistryImpl.preCreate(CallbackRegistryImpl.java:57) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:108) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:185) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:128) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:760) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:746) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:311) ~[spring-orm-5.3.14.jar:5.3.14] at com.sun.proxy.$Proxy121.persist(Unknown Source) ~[na:na] at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:624) ~[spring-data-jpa-2.6.0.jar:2.6.0] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:529) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:638) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:163) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:138) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) ~[spring-data-commons-2.6.0.jar:2.6.0] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.14.jar:5.3.14] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.14.jar:5.3.14] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.14.jar:5.3.14] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.14.jar:5.3.14] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:174) ~[spring-data-jpa-2.6.0.jar:2.6.0] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.14.jar:5.3.14] at com.sun.proxy.$Proxy124.save(Unknown Source) ~[na:na] at com.example.shoppingmall.controller.InitItem$InitItemService.init(InitItem.java:34) ~[classes/:na] at com.example.shoppingmall.controller.InitItem$InitItemService$$FastClassBySpringCGLIB$$681abf02.invoke(<generated>) ~[classes/:na] at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.14.jar:5.3.14] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.14.jar:5.3.14] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.14.jar:5.3.14] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.14.jar:5.3.14] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698) ~[spring-aop-5.3.14.jar:5.3.14] at com.example.shoppingmall.controller.InitItem$InitItemService$$EnhancerBySpringCGLIB$$a2f07708.init(<generated>) ~[classes/:na] at com.example.shoppingmall.controller.InitItem.init(InitItem.java:22) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.3.14.jar:5.3.14] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.3.14.jar:5.3.14] ... 18 common frames omitted Process finished with exit code 1 ㅡㅡㅡㅡㅡㅡㅡ오류코드 끝ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.flush, em.clear에 관한 질문입니다
강의에서 영속성 컨텍스트에 있는 데이터를 데이터베이스에 보내기 위해 flush하고 그리고 영속성 컨텍스트를 비우기 위해 clear한 후 em.find하여 영속성 컨텍스트가 비워졌으니 데이터베이스에서 값을 가져오는 것은 이해했습니다. 제가 알기로는 em.find가 영속성 컨텍스트에서 찾아보고 없으면 데이터베이스에서 데이터를 가져오는데 그러면 clear하지 않고 영속성 컨텍스트에서 자료 찾아오는 것과 무슨 차이가 있는지 모르겠습니다... 영속성 컨텍스트에도 같은 자료가 있으니 굳이 clear할 필요가 있나 생각이 듭니다. 답변 부탁드립니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
컬렉션 값 묵시적 조인에 대한 질문
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] https://www.inflearn.com/questions/379070 이전 질문을 통해 t.member as m 임을 이해하였습니다. 하지만 아직 1가지 의문이 듭니다. 질문 1) String query = "select t.members from Team t"; 위 코드는 묵시적 조인이 발생하고, 따라서 t.members.username 과 같은 호출은 불가능하게 됩니다. 왜냐하면 members는 collection이기 때문에 size와 같은 collection에 대한 정보는 얻어올수 있어도, collection 안에 있는 원소에 대한 정보를 얻어올수는 없기 때문이죠. 따라서 강의에서는 다음과 같이 명시적 조인으로 바꾸면 select m.username from Team t join t.members m 과 같이 m.username 와 같은 사용이 가능하다고 하셨습니다. 하지만 두 코드 모두 1. select t.members from Team t 2. select m from Team t join t.members m (member를 가져오기 위해 select m으로 변경) 동일한 SQL 생성됨을 알수있었습니다. 1. select t.members from Team t 2. select m from Team t join t.members m 두 코드 모두 같은 SQL문을 보여주더군요! 여기서 질문!! 둘다 같은 SQL을 생성하는데 SELECT 절에서 왜 묵시적 조인 쪽은 username에 접근이 안되고, 명시적 조인은 username에 접근이 가능한가요? select t.members from Team t 에 의해서 생성되는 SQL 문을 A select m from Team t join t.members m 에 의해서 생성되는 SQL 문을 B 라고 한다면 A랑 B랑 같은 SQL문을 보여주는데, B에서 username을 얻어올 수 있듯, A에서 username을 얻어올수 있지 않을까? 생각해서 질문 남겨봅니다. (참고로 t.members는 collection자체이기 때문에 원소 자체의 필드인 username에 접근 불가능하며 m은 Member 엔티티니까 m.username, m.age와 같이 접근 가능한것은 알겠는데, 이는 JPQL상의 코드에서 나타나는 차이지 SQL상에서는 동일하게 SELECT 쿼리를 보내는것 같아서요.) 저의 질문 의도가 좀 명확하지 않다면 죄송합니다 ㅠ.ㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
부트스트랩 CSS 적용 안됨
안녕하세요 부트스트랩 css 적용이 계속 안되서 에러가 발생하는데 영상에서 하신 방법들(Resources 우클릭 - Reload from disk 등) 그대로 하더라도 적용이 안되네요!ㅠㅠ 미리 감사드립니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@GeneratedValue 사용 후 DDL 실패
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용] h2는 1.4.199를 사용합니다 User 테이블이 생성되어야 할 것 같은데 생성 실패하는 이유가 뭘까요? (User 테이블이 아니라 강의를 똑같이 따라한 Member에서 id를 @GeneratedValue해도 같은 오류가 나타납니다) persistence.xml <?xml version="1.0" encoding="UTF-8"?><!--jpa 설정 파일--><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> User.java package hellojpa;import javax.persistence.*;@Entitypublic class Users { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private String id; @Column private String name; public Users() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; }} 오류내역 Hibernate: create table User ( id varchar(255) generated by default as identity, name varchar(255), primary key (id) ) 1월 01, 2022 6:05:00 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException WARN: GenerationTarget encountered exception accepting command : Error executing DDL " create table User ( id varchar(255) generated by default as identity, name varchar(255), primary key (id) )" via JDBC Statement org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " create table User ( id varchar(255) generated by default as identity, name varchar(255), primary key (id) )" via JDBC Statement at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:559) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:504) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.createTable(AbstractSchemaMigrator.java:277) at org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:71) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:207) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:114) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:183) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:310) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:467) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:939) 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.MappingMain.<clinit>(MappingMain.java:9) Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000d\000a CREATE TABLE USER[*] (\000d\000a ID VARCHAR(255) GENERATED BY DEFAULT AS IDENTITY,\000d\000a NAME VARCHAR(255),\000d\000a PRIMARY KEY (ID)\000d\000a )"; expected "identifier"; SQL statement: create table User ( id varchar(255) generated by default as identity, name varchar(255), primary key (id) ) [42001-204] at org.h2.message.DbException.getJdbcSQLException(DbException.java:521) at org.h2.message.DbException.getJdbcSQLException(DbException.java:496) at org.h2.message.DbException.getSyntaxError(DbException.java:265) at org.h2.command.Parser.readIdentifier(Parser.java:6080) at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:6040) at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:6069) at org.h2.command.Parser.parseCreateTable(Parser.java:10325) at org.h2.command.Parser.parseCreate(Parser.java:7811) at org.h2.command.Parser.parsePrepared(Parser.java:1140) at org.h2.command.Parser.parse(Parser.java:1068) at org.h2.command.Parser.parse(Parser.java:1037) at org.h2.command.Parser.prepareCommand(Parser.java:965) at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:624) at org.h2.server.TcpServerThread.process(TcpServerThread.java:288) at org.h2.server.TcpServerThread.run(TcpServerThread.java:191) at java.lang.Thread.run(Unknown Source) at org.h2.message.DbException.getJdbcSQLException(DbException.java:451) at org.h2.engine.SessionRemote.done(SessionRemote.java:607) at org.h2.command.CommandRemote.prepare(CommandRemote.java:85) at org.h2.command.CommandRemote.<init>(CommandRemote.java:51) at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:477) at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1292) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:217) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:205) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 15 more 1월 01, 2022 6:05:00 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop INFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/test] Process finished with exit code 0
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
createOrderItem 메소드에서 setOrder를 하지 않은 이유가 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 안녕하세요.OrderItem의 생성 메소드 (createOrderItem)에서 setOrder를 하지 않은 이유가OrderItem을 Order가 관리하는 형태여서 그런건가요? 이유가 무엇인가요?
-
해결됨15일간의 빅데이터 파일럿 프로젝트
java 버전 선택 관련 질문
1. java 버전으로 1.8을 설치한다고 하셨는데 1.8로 설치하는 이유를 알고 싶습니다. 2. 환경 변수에 이미 JAVA_HOME이 있으면 어떻게 해야하나요? 3. 이클립스 installer를 다운받고 실행했더니 다음과 같이 뜨는데 어떤 것을 설치해야하나요 4. vitualbox download 하는 부분에서 no longer supported라고 명시되어있음에도 다운받아서 사용하는 이유를 알고 싶습니다. 5. 파일질라를 사용하는 대신에 scp 나 rsync 명령어를 사용하여 진행할 수 있을까요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
통합테스트에서 @Autowired
안녕하세요! 강의 너무 잘 듣고 있습니다. 듣다가 잘 모르겠는 점이 있어서 질문을 드립니다. 기존 서비스 테스트코드에서는 @BeforeEach로 의존주입을 했는데, 통합테스트에서는 아래와 같이 @Autowired로 끌어온다고 하셨습니다. 테스트코드인데도 SpringConfig코드에서 아래의 서비스와 레포지토리 객체를 실제로 끌어오는 건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
컬렉션 값 연관 경로 : 명시적 조인 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]명시적 조인 예시로 보여주신 다음 JPQL에 궁금한적이 있습니다. select m.username from Team t join t.members m 위 코드에서 alias m은 무엇에 대한 별칭인가요? 1. t.members as m 위 코드 처럼 team과 members를 묵시적으로 조인한 결과 릴레이션을 m이라 칭한다는 의미인가요?? 아니면... 2. (Team t join t.members) m 위 코드처럼 t와 t.members 를 조인한 릴레이션을 m이라 칭한다는 의미인가요?? PPT를 보면 "FROM 절에서 명시적 조인을 통해 별칭을 얻는다" 라고 하셨는데, 명시적 조인을 통해 => 즉 2번 을 통해 m을 얻는다는 의미 인가요? 이게 한줄로 써있다 보니까 햇갈리는것 같습니다 ㅠ.ㅠ