File tree Expand file tree Collapse file tree 9 files changed +95
-6
lines changed
infrastructure/persistence/jpa/repository Expand file tree Collapse file tree 9 files changed +95
-6
lines changed Original file line number Diff line number Diff line change 22
33import org .springframework .boot .SpringApplication ;
44import org .springframework .boot .autoconfigure .SpringBootApplication ;
5+ import org .springframework .data .jpa .repository .config .EnableJpaAuditing ;
56
7+ @ EnableJpaAuditing
68@ SpringBootApplication
79public class Application {
810
Original file line number Diff line number Diff line change 1+ package com .mpc .springboot .config .audit ;
2+
3+ import org .springframework .data .domain .AuditorAware ;
4+ import org .springframework .stereotype .Component ;
5+
6+ import java .util .Optional ;
7+
8+ @ Component
9+ public class SecurityAuditorAware implements AuditorAware <String > {
10+
11+ @ Override
12+ public Optional <String > getCurrentAuditor () {
13+ return Optional .of ("test-member" );
14+ }
15+ }
Original file line number Diff line number Diff line change 1+ package com .mpc .springboot .config .persistence .jpa ;
2+
3+ import org .hibernate .boot .model .naming .CamelCaseToUnderscoresNamingStrategy ;
4+ import org .hibernate .boot .model .naming .Identifier ;
5+ import org .hibernate .engine .jdbc .env .spi .JdbcEnvironment ;
6+
7+ public class QuotedCamelCaseToUnderScoresNamingStrategy extends CamelCaseToUnderscoresNamingStrategy {
8+
9+ @ Override
10+ public Identifier toPhysicalColumnName (Identifier name , JdbcEnvironment jdbcEnvironment ) {
11+ if (name == null ) {
12+ return null ;
13+ }
14+ Identifier snakeCaseIdentifier = super .toPhysicalColumnName (name , jdbcEnvironment );
15+ return Identifier .toIdentifier ("`" + snakeCaseIdentifier .getText () + "`" , snakeCaseIdentifier .isQuoted ());
16+ }
17+
18+ @ Override
19+ public Identifier toPhysicalTableName (Identifier name , JdbcEnvironment jdbcEnvironment ) {
20+ if (name == null ) {
21+ return null ;
22+ }
23+ Identifier snakeCaseIdentifier = super .toPhysicalTableName (name , jdbcEnvironment );
24+ return Identifier .toIdentifier ("`" + snakeCaseIdentifier .getText () + "`" , snakeCaseIdentifier .isQuoted ());
25+ }
26+ }
Original file line number Diff line number Diff line change 11package com .mpc .springboot .member .application .service ;
22
3+ import jakarta .transaction .Transactional ;
4+
35import org .springframework .stereotype .Service ;
46import com .mpc .springboot .member .domain .entity .Member ;
57import com .mpc .springboot .member .domain .exception .MemberNotFoundException ;
@@ -18,6 +20,7 @@ public Member getMemberBy(MemberCode code) {
1820 .orElseThrow (MemberNotFoundException ::new );
1921 }
2022
23+ @ Transactional
2124 public Member createMember (Member member ) {
2225 return memberRepository .save (member );
2326 }
Original file line number Diff line number Diff line change 22
33import jakarta .persistence .*;
44
5+ import org .springframework .data .jpa .domain .support .AuditingEntityListener ;
56import com .mpc .springboot .member .domain .vo .MemberCode ;
67import com .mpc .springboot .member .domain .mapping .MemberCodeConverter ;
78import com .mpc .springboot .member .domain .vo .MemberName ;
9+ import com .mpc .springboot .shared .domain .AuditFields ;
810import lombok .*;
911
1012@ Getter
11- @ NoArgsConstructor
13+ @ EntityListeners (AuditingEntityListener .class )
14+ @ NoArgsConstructor (access = AccessLevel .PROTECTED )
1215@ Entity
1316public class Member {
1417
@@ -22,10 +25,8 @@ public class Member {
2225 @ Embedded
2326 private MemberName name ;
2427
25- public Member (MemberCode code , MemberName name ) {
26- this .code = code ;
27- this .name = name ;
28- }
28+ @ Embedded
29+ private AuditFields auditFields = new AuditFields ();
2930}
3031
3132
Original file line number Diff line number Diff line change 33import java .util .Optional ;
44
55import org .springframework .data .jpa .repository .JpaRepository ;
6+ import org .springframework .stereotype .Repository ;
67import com .mpc .springboot .member .domain .entity .Member ;
78import com .mpc .springboot .member .domain .vo .MemberCode ;
89
9- public interface MemberJpaRepository extends JpaRepository <Member , Long > {
10+ @ Repository
11+ public interface MemberJpaRepository extends JpaRepository <Member , Integer > {
1012
1113 Optional <Member > findByCode (MemberCode code );
1214}
Original file line number Diff line number Diff line change 1+ package com .mpc .springboot .shared .domain ;
2+
3+ import jakarta .persistence .Column ;
4+ import jakarta .persistence .Embeddable ;
5+
6+ import lombok .Getter ;
7+ import lombok .NoArgsConstructor ;
8+ import org .springframework .data .annotation .CreatedBy ;
9+ import org .springframework .data .annotation .LastModifiedBy ;
10+ import org .springframework .data .annotation .CreatedDate ;
11+ import org .springframework .data .annotation .LastModifiedDate ;
12+
13+
14+ import java .time .LocalDateTime ;
15+
16+ @ Getter
17+ @ NoArgsConstructor
18+ @ Embeddable
19+ public class AuditFields {
20+
21+ @ CreatedBy
22+ @ Column (updatable = false )
23+ private String createdBy ;
24+
25+ @ CreatedDate
26+ @ Column (updatable = false )
27+ private LocalDateTime createdDateTime ;
28+
29+ @ LastModifiedBy
30+ private String lastModifiedBy ;
31+
32+ @ LastModifiedDate
33+ private LocalDateTime lastModifiedDateTime ;
34+ }
Original file line number Diff line number Diff line change 99 database : mysql
1010 hibernate :
1111 ddl-auto : validate
12+ naming :
13+ physical-strategy : com.mpc.springboot.config.persistence.jpa.QuotedCamelCaseToUnderScoresNamingStrategy
1214 show-sql : true
1315 properties :
1416 hibernate.format_sql : true
Original file line number Diff line number Diff line change 1+ alter table member add column created_by varchar (320 );
2+ alter table member add column last_modified_by varchar (320 );
3+ alter table member add column created_date_time timestamp ;
4+ alter table member add column last_modified_date_time timestamp ;
You can’t perform that action at this time.
0 commit comments