월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
벌크 연산 11:09 em.clear()를 하지 않았는데.....
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]Team teamA = new Team(); teamA.setName("teamA"); em.persist(teamA); Team teamB = new Team(); teamB.setName("teamB"); em.persist(teamB); Member member1 = new Member(); member1.setUsername("member1"); member1.setAge(10); member1.changeTeam(teamA); em.persist(member1); Member member2 = new Member(); member2.setUsername("member2"); member2.setAge(20); member2.changeTeam(teamA); em.persist(member2); Member member3 = new Member(); member3.setUsername("member3"); member3.setAge(30); member3.changeTeam(teamB); em.persist(member3); em.flush(); em.clear(); int resultCount = em.createQuery("update Member m set m.age = 100") .executeUpdate(); Member findMember = em.find(Member.class, member1.getId()); System.out.println("findMember.getAge() = " + findMember.getAge());em.clear()를 하지 않으면 10이 나와야 할거 같은데 100이 변경된게 영속성 컨텍스트에 반영이 된거 처럼 나오는데.스펙이 바뀐걸까요? 아니면 제가 뭘 잘 못한걸까요?https://drive.google.com/file/d/1qzmIqCOXOeCdy5McL0_RzcbugxbmdyMV/view?usp=share_link
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
저만 이상하게 되나요? 21:36 join fetch 해도 2번만 나오는 이유가....
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team_id") private Team team;Team teamA = new Team(); teamA.setName("teamA"); em.persist(teamA); Team teamB = new Team(); teamB.setName("teamB"); em.persist(teamB); Member member1 = new Member(); member1.setUsername("member1"); member1.setAge(10); member1.changeTeam(teamA); em.persist(member1); Member member2 = new Member(); member2.setUsername("member2"); member2.setAge(20); member2.changeTeam(teamA); em.persist(member2); Member member3 = new Member(); member3.setUsername("member3"); member3.setAge(30); member3.changeTeam(teamB); em.persist(member3); em.flush(); em.clear(); String query = "select t from Team t join fetch t.members"; List<Team> result = em.createQuery(query, Team.class) .getResultList(); System.out.println("result.size() = " + result.size());패치 조인을 해도 왜 2번만 나올까요?혹시나 해서 파일도 올려봅니다.https://drive.google.com/file/d/1nOHKHJdVRezwrNpd_1G_3-EyeD8Neymg/view?usp=share_link
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
1차 캐시 용량 및 INSERT INTO 관련 질문입니다.
현재 API 통신을 통해서 데이터를 전달을 받고 있습니다.대략 갯수는 7만개 정도 됩니다.하지만 INSERT 쿼리는 21222개만 JPA에서 날라가고 있어서 DB에는 21222개만 적재가 되고 있습니다. 개인적인 추측으로는 1차 캐시에 저장할 수 있는 최대 용량이 21222개라서 라고 생각하고 있습니다.이러한 경우 1차 캐시의 용량을 설정하려면 어디서 해야할 지 질문드립니다!YML에서 설정을 잡아주면 될까요?이 외에도 다른 가능성이 있을지 궁금합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
강의자료와 실제 생성 테이블이 다르고, Address가 값 객체일 수 없다고 생각합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. 김영한님의 강의를 잘 보고 있습니다. 강의를 보던도중, 문득 의문점이 들어서 여쭤보고자 질문을 작성하게 되었습니다. 질문의 테마는 값 타입 컬렉션과 기본키라고 할 수 있겠네요.기본 지식테이블은 기본키가 있을수도, 없을수도 있다.제가 배운대로는, 테이블은 기본키가 존재할 수도 있고 존재하지 않을 수도 있다고 배웠습니다. 그리고 기본키를 두는 이유는 기본키가 겹치지 않도록 해서, 데이터 중복을 막고, 조회 시 효율 증가를 위해서라고 생각했습니다. 김영한님의 강의에서 말하는 값타입은 주소가 다르더라도 안에 있는 값이 모두 같다고 하신걸로 이해했습니다.그래서 자바 객체가 값타입으로 들어가는 경우에는 equals를 통해서 같은지를 비교한다는 것도요!! 김영한님의 강의 중 예제로 들어주셨던 Member의 favoriteFoods, addressHistory는 값 타입을 데이터베이스 테이블로 변환한 예시로 이해했습니다.그리고 강의 내용에서 JPA를 이용해서 Table 구조를 생성하는 걸로 이해했습니다. 여기까지가 제가 이해한 내용입니다. 저는 그래서 해당 구조로 데이터베이스를 만들어준다고 인지했고, FAVORITE_FOOD, ADDRESS는 각각 중복값이 들어갈 수없다고 생각했습니다. 문제상황하지만 테이블의 생성 내용을 보면, 기본키 설정 부분이 빠져 있습니다.외래키 매핑만 되어 있고 실제로 기본키 부분이 빠져있습니다.제가 만든, ADDRESS 테이블을 예시로 들면,이는, FAVORITE_FOOD 도 동일합니다. 정말 중복값이 들어갈 수 없는지 테스트해보았습니다.테스트를 위한 코드는 다음과 같습니다.Address address = new Address("newCity", "street", "10000"); Member member1 = new Member(); member1.setName("member1"); member1.setHomeAddress(address); member1.getFavoriteFoods().add("치킨"); member1.getFavoriteFoods().add("치킨"); member1.getFavoriteFoods().add("치킨"); member1.getFavoriteFoods().add("피자"); member1.getFavoriteFoods().add("족발"); Address oldAddress = new Address("oldCity3", "street", "10000"); member1.getAddressList().add(new Address("oldCity", "street", "10000")); member1.getAddressList().add(new Address("oldCity2", "street", "10000")); member1.getAddressList().add(new Address("oldCity3", "street", "10000")); member1.getAddressList().add(new Address("oldCity3", "street", "10000")); member1.getAddressList().add(new Address("oldCity3", "street", "10000")); em.persist(member1); 결과값은 다음과 같습니다.값을 보게되면, FAVORITE_FOOD의 경우는 Set 자료구조 사용으로 중복값이 들어갈 수 없는 것이고, ADDRESS의 경우는 중복값이 들어갈 수 있었습니다. 만약 값의 변경이 일어나는 경우에는 어떻게 될까? 하는 고민이 생겨, 중복으로 들어있는 내용의 값을 변경해보았습니다.Address address = new Address("newCity", "street", "10000"); Member member1 = new Member(); member1.setName("member1"); member1.setHomeAddress(address); member1.getFavoriteFoods().add("치킨"); member1.getFavoriteFoods().add("치킨"); member1.getFavoriteFoods().add("치킨"); member1.getFavoriteFoods().add("피자"); member1.getFavoriteFoods().add("족발"); Address oldAddress = new Address("oldCity3", "street", "10000"); member1.getAddressList().add(new Address("oldCity", "street", "10000")); member1.getAddressList().add(new Address("oldCity2", "street", "10000")); member1.getAddressList().add(new Address("oldCity3", "street", "10000")); member1.getAddressList().add(new Address("oldCity3", "street", "10000")); member1.getAddressList().add(new Address("oldCity3", "street", "10000")); em.persist(member1); em.flush(); em.clear(); Member findMember = em.find(Member.class, member1.getId()); System.out.println("================== Start 2 =================="); findMember.getAddressList().remove(oldAddress); findMember.getAddressList().add(new Address("newCity1", "street", "10000")); tx.commit(); 결과값은 다음과 같습니다.중복값을 한번에 지워준다면, 그래도 결과적으로는 ADDRESS값을 중복이 없는 값객체로 쓸 수 있겠다고 생각했지만, 모두 지우지 않고 중복값을 하나만 지웠습니다.물론 List의 특성 상 중복 값 한개만 지우는게 당연하지만요. 가설목표하던 테이블 구조로 실제로 만들어지지 않았다고 생각했습니다. -> 기본키가 없다.왜냐하면 생성하고자 하는 테이블 구조와 생성된 테이블 구조가 다르기 때문입니다.음식에서 중복이 생기지 않는 이유는 Set의 특성 때문이지 테이블 때문이 아니라고 생각이 들었습니다. 값 객체의 특성 상 중복을 허용하는 경우는 없다.좋아하는 음식의 경우 같은 음식이 두번 있을 이유는 없지만, 이전의 주소의 경우는 같은 주소에 두번 이사갈 수 있다.그렇다면 음식과 다르게 주소의 경우는 중복이 가능하고, 값을 추적할 수 있어야 하므로 Entity로 사용하는게 맞지 않을까요?이 부분은 김영한님깨서 설명해주신 부분과 일치하지만, 결론까지 도달한게 맞는지 궁금합니다. 두서 없이 길게 적은 것 같은데, 제가 생각한 가설이 맞는지가 궁금합니다. 그리고 나아가 가설까지 도달하는 방식에 문제가 있거나 고칠점이 있다고 피드백도 부탁드립니다. 읽어주셔서 감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@Query vs QueryDsl
@Query 내부적으로 문자로 JPQL을 적어야 하는 순간에는 무조건 QueryDsl로 type-safe하게 쿼리를 작성하고 있었습니다 이부분을 좀 생각해보니까SELECT DISTINCT t FROM Team t JOIN FETCH t.members WHERE t.id = :teamIdSELECT m FROM Member m JOIN FETCH m.team예시와 같은 간단한 쿼리들도 전부 QueryDsl로 옮기다보니까 굳이 @Query로 작성하지 않고 옮겨서 작성해야하나 라는 생각이 들었습니다 영한님의 경우 문자로 JPQL을 작성해야하는 순간은 전부 QueryDsl로 작성하시는지 궁금해서 질문을 남기게 되었습니다
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@Embedded 와 @EmbeddedId 의 차이
안녕하세요 값 타입 중 임베디드 타입에 대해서 공부하고 있는데, @Embeddable 과 @Embedded 외 @EmbeddedId 라는 어노테이션도 있더라구요,@Entity @Table(name = "Area") public class AreaJpaEntity { @EmbeddedId private AreaId id; ... } @Embeddable public class AreaId { @column(name = "area_alpha_name") private String areaAlphaName; @column(name = "area_num_name") private String areaNumName; ... } @EmbeddedId가 @Embedded와 유사하게 쓰이는 것 같은데, 정확히 어떤 차이점이 있는건가요? 그리고 @EmbeddedId로 선언된 타입도 임베디드 타입으로 볼 수 있는거죠?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
즉시로딩과 지연로딩 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]즉시로딩과 지연로딩 강의3:16 부분에서JpaMain 을 실행하면 저 같은 경우 에는ERROR: HHH000315: Exception executing batch [org.h2.jdbc.JdbcBatchUpdateException: Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.TEAM(TEAM_ID) [1, NULL, NULL, NULL, NULL, 'teamA']"; SQL statement:위와 같은 에러가 발생하는데요.이미 데이터가 들어가있어서 발생한다는 오류로 알고 있습니다.하지만 강사님의 경우에는 데이터가 들어가 있는 상태에서 한번 더 실행해도 저와 같은 에러는 발생하지 않는데어떻게 고쳐야 하는지 궁금해서 질문드립니다.부연설명을 더 하자만DB를 아예 삭제했다가 실행하면 에러는 발생하지 않고 강의대로 실행되지만 데이터가 들어간 시점에서 한번 더 실행하면 위와 같은 에러가 발생하는 상황입니다.추가로 해당부분 깃헙에 올려놓은 코드입니다!https://github.com/castela0119/hello_jpa/commit/c5f3435e99d58404fb41d6585bd0f3f7d0919b34
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일대다 단방향에 관해 질문드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@OneToMany @JoinColumn(name = "TEAM_ID") private List<Member> members = new ArrayList<>();1:N 단방향에서 이렇게 작성한 경우 여기서 N이 Member 인지 어떻게 판단하는 건가요? 따로 지정하지 않아도 List에 들어가는 클래스로 판단할 수 있는건가요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
사용자 정의 함수 (rank 함수)
안녕하세요.사용자 정의 함수 등록을 통해 rank 함수를 사용하고 싶은데 rank 함수는 rank()와 over() 두개의 함수로 이루어져 있는데 rank() 와 over() 모두 정의를 해줘야 되나요??그리고 사용할 경우 인자 값은 어떻게 줘야 될까요?"PARTITION BY [변수명] ORDER BY [변수명] DESC"이런식으로 스트링 값을 넣어주면 되는걸까요?DB는 mysql 8버전 이상 사용하고 있습니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
데이터베이스 스키마 자동생성 hibernate-update
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]pom.xml persistence.xmlMemberconsole창h2databasehibernate의 create와 create-drop은 아무 이상없이 실행이 되는데 update는 실행을 하면 alert는 실행이 안되고 select만 실행이 됩니다 무엇이 문제인지 알수있을까요??
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
프록시와 연관관계 관리 - orphanRemovel 관련 질문
안녕하세요.[프록시와 연관관계 관리 - orphanRemovel] 내용에서 질문드립니다.orphanRemovel = false, cascade = ALL 로 설정한 상태에서 @OneToMany로 설정된 컬렉션 내의 값을 제거하면, cascade 옵션에 의해 update 쿼리가 나갈 때 컬렉션에서 제거된 원소가 같이 삭제되어야 하는게 아닌가요?위 내용이 틀렸다면 cascade의 delete 쿼리는 부모 엔티티 '자체'가 사라졌을 때만 컬렉션 내의 자식 엔티티들에게 전이되는 걸까요??추가로, 고아 객체 제거 기능은 cascade와 마찬가지로, 연관관계의 주인이 아닌 컬럼에서도 사용이 가능한건지도 궁금합니다!내용이 잘 이해되질 않아 질문이 다소 두서없는 점 죄송합니다ㅜ
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
org.hibernate.annotaion.Table 사용에 관한 질문입니다.
해당 어노테이션을 이용해서 테이블 주석을 달고 싶은데 작동을 하지 않습니다.어떠한 경우인지 궁금해서 질문 올려봅니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
프로젝트 생성
org.example 프로젝트의 양이 많아서 새로운 폴더를 만들고 작업하려하니INFO: HHH000400: Using dialect: org.hibernate.dialect.H2DialectException in thread "main" org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: org.example.MemberProduct.products in org.example.Product.memberProductss at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:785) at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:736) at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:54) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1696) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1664) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:287) 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 jpa_join_project.Main.main(Main.java:10) 위와같은 오류가 발생합니다. ㅠ
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
자식객체 조건을 걸어 부모객체를 가지고 왔을때 부모객체 밑에 자식객체 데이터가 그대로입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요 궁금한게 있어 글을 남깁니다. 예를 들어서 유저가 있고 유저가 쓰는 게시글이 있습니다. 유저 1 : 게시글 N // 유저 1 : 차단 N게시글 1 : 채팅 N // 유저 1 : 채팅 N 이 상황에서 질문 글 조회 할 경우 글 객체에 채팅 리스트들을 가져다가 쓰고 있습니다. 이제 질문입니다. 저 질문글에 제목 질문 그리고 채팅방이 몇개있는지를 표현 하고 싶은데 차단한 유저의 채팅방은 카운트를 안했으면 합니다. 유저 인덱스로 내가 차단한 유저 리스트를 가지고 온뒤 게시글을 조회할때 select *from Qa q join Room r on q.idx = r.q.idxwhere r.댓글작성자Idx not in (차단자 리스트) 해서 게시글을 조회 하였을경우 게시글을 가지고 온뒤 객체 안을 보면 여전히 차단자 리스트에 포함되어있는 채팅방까지 나옵니다. 이럴 경우 자식리스트 (oneToMany) 객체의 조건을 걸고 싶을땐 어떻게 해야하나요 ? 질문을 최대한 정리 하려했는데도 가독성이 좋지 못하네요 . 제 질문이 이해 안되시는 부분이 있다면 얘기 부탁드리겠습니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
주 테이블에 외래 키 단점
안녕하세요!일대일매핑을 '주 테이블에 외래 키'로 사용했을 때 단점이 값이 없으면 외래 키에 null을 허용하는 것이라고 되어있는데 이 부분 잘 이해가 되지 않아서요ㅜㅜ'대상 테이블에 외래 키' 방식으로 일대일 매핑을 하더라도 결국 대상 테이블 입장에서는 값이 없으면 null이 들어가는 건 마찬가지 아닌가요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
객체 탐색이 필요 없는 경우에도 연관관계를 사용하는 것이 좋을까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]애플리케이션 로직 상 Member 객체에서 Team 객체를 탐색하는 경우가 없을 때, 즉 객체의 외래키 식별자(team_id)를 갖고 있어도 충분하다면 객체의 연관관계를 사용해야 하는지 궁금합니다. 객체의 연관관계를 사용하는 것은 객체 지향적인 방법이고, 자유로운 객체 탐색이 가능하다는 것은 충분히 이해했으나 이러한 장점을 누릴 필요가 없을 때에도 확장성을 고려해 객체의 연관관계를 사용하는 것이 좋을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
sql의 기초만 아는데 sql 문 따로 학습 후 들어야할까요? 아님 동시에 하루 1시간 sql 이런식으로 같이 들어오될까요
sql의 기초만 아는데 sql 문 따로 학습 후 들어야할까요? 아님 동시에 하루 1시간 sql 이런식으로 같이 들어오될까요
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
기본키 매핑 강의
Member.java @Entity public class Member { //기본키 맵핑 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private String id; @Column(name = "name", nullable = false) private String username; public Member() {} public void setUsername(String username) { this.username = username; } public String getUsername() { return username; } public void setId(String id) { this.id = id; } public String getId() { return id; } } Main.java public class Main { 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.setId("ID_A"); member.setUsername("임연주"); em.persist(member); tx.commit(); } catch (Exception ex) { tx.rollback(); } finally { em.close(); } emf.close(); } }persistent.xml <?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="1234"/> <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>pom.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>org.example</groupId> <artifactId>jpast_01</artifactId> <version>1.0-SNAPSHOT</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>19</source> <target>19</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>2.1.214</version> </dependency> </dependencies> </project>코드는 위와 같습니다.12월 08, 2022 2:27:42 오후 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation INFO: HHH000204: Processing PersistenceUnitInfo [name: hello] 12월 08, 2022 2:27:42 오후 org.hibernate.Version logVersion INFO: HHH000412: Hibernate ORM core version 5.6.5.Final 12월 08, 2022 2:27:43 오후 org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> INFO: HCANN000001: Hibernate Commons Annotations {5.1.2.Final} 12월 08, 2022 2:27:43 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!) 12월 08, 2022 2:27:43 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001005: using driver [org.h2.Driver] at URL [jdbc:h2:tcp://localhost/~/test] 12월 08, 2022 2:27:43 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001001: Connection properties: {password=****, user=sa} 12월 08, 2022 2:27:43 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001003: Autocommit mode: false 12월 08, 2022 2:27:43 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init> INFO: HHH000115: Hibernate connection pool size: 20 (min=1) 12월 08, 2022 2:27:43 오후 org.hibernate.dialect.Dialect <init> INFO: HHH000400: Using dialect: org.hibernate.dialect.H2Dialect Hibernate: drop table if exists Member CASCADE 12월 08, 2022 2:27:45 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@f1a45f8] 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. Hibernate: create table Member ( id varchar(255) generated by default as identity, name varchar(255) not null, primary key (id) ) 12월 08, 2022 2:27:45 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@1431267b] 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. 12월 08, 2022 2:27:45 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException WARN: GenerationTarget encountered exception accepting command : Error executing DDL " create table Member ( id varchar(255) generated by default as identity, name varchar(255) not null, primary key (id) )" via JDBC Statement org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " create table Member ( id varchar(255) generated by default as identity, name varchar(255) not null, primary key (id) )" via JDBC Statement at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:458) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:442) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:325) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:169) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:138) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:124) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:164) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:81) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:335) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:471) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1498) 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 org.example.Main.main(Main.java:14) Caused by: org.h2.jdbc.JdbcSQLFeatureNotSupportedException: Feature not supported: "CHARACTER VARYING(255)"; SQL statement: create table Member ( id varchar(255) generated by default as identity, name varchar(255) not null, [50100-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:556) 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.message.DbException.getUnsupportedException(DbException.java:287) at org.h2.command.ddl.SequenceOptions.getBounds(SequenceOptions.java:316) at org.h2.command.ddl.SequenceOptions.getBounds(SequenceOptions.java:244) at org.h2.schema.Sequence.<init>(Sequence.java:100) at org.h2.table.Column.initializeSequence(Column.java:459) at org.h2.command.ddl.CommandWithColumns.generateSequences(CommandWithColumns.java:103) at org.h2.command.ddl.CreateTable.update(CreateTable.java:113) at org.h2.command.CommandContainer.update(CommandContainer.java:169) at org.h2.command.Command.executeUpdate(Command.java:252) at org.h2.server.TcpServerThread.process(TcpServerThread.java:408) at org.h2.server.TcpServerThread.run(TcpServerThread.java:191) at java.base/java.lang.Thread.run(Thread.java:1589) at org.h2.message.DbException.getJdbcSQLException(DbException.java:556) at org.h2.engine.SessionRemote.readException(SessionRemote.java:637) at org.h2.engine.SessionRemote.done(SessionRemote.java:606) at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:227) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:252) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:223) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 15 more 12월 08, 2022 2:27:45 오후 org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] 12월 08, 2022 2:27:45 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stop INFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/test] Process finished with exit code 0 오류 내용은 위와 같습니다. 왜 이런 오류가 발생하는지 원인 파악이 잘 안됍니다..
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
Named 쿼리 xml 작성 질문입니다
<properties> 선언 전에<mapping-file>META-INF/ormMember.xml</mapping-file>이 구문을 먼저 작성할 땐 에러가 안뜨는데mapping-file 을 먼저 선언 후 properties 선언을 하니 잘 작동합니다 어떤 원리인가요
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 컨텍스트에서 엔티티 수정 부분
영속성 컨텍스트에서 엔티티 수정 부분입니다.select쿼리는 나오는데 update가 실행이 안됍니다...캐시 삭제 해봤는데 동일합니다.