anchor.diff:  ----
   
   Common persistence technologies (such as JPA) require a default constructor, preventing this
  -kind of design. Fortunately, there is now a workaround for this
  +kind of design. Fortunately, there is a workaround for this
   https://stackoverflow.com/questions/32038177/kotlin-with-jpa-default-constructor-hell["`default constructor hell`"],
   since Kotlin provides a https://kotlinlang.org/docs/reference/compiler-plugins.html#kotlin-jpa-compiler-plugin[`kotlin-jpa`]
   plugin that generates synthetic no-arg constructor for classes annotated with JPA annotations.
  
positive.code: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-typesafe-configuration-properties[`@ConfigurationProperties`]
  instead of `@Value` annotations.
  
  As an alternative, you can customize the properties placeholder prefix by declaring the
  following configuration beans:
  
  [source,kotlin,indent=0]
  
negative.code: * `@Transactional`
  * `@Cacheable`
  
  Meta-annotation support means that types annotated with `@Configuration`, `@Controller`,
  `@RestController`, `@Service`, or `@Repository` are automatically opened since these
  annotations are meta-annotated with `@Component`.
  
  https://start.spring.io/#!language=kotlin&type=gradle-project[start.spring.io] enables
  the `kotlin-spring` plugin by default. So, in practice, you can write your Kotlin beans
  without any additional `open` keyword, as in Java.
  
  NOTE: The Kotlin code samples in Spring Framework documentation do not explicitly specify
  `open` on the classes and their member functions. The samples are written for projects
  using the `kotlin-allopen` plugin, since this is the most commonly used setup.
  
  === Using Immutable Class Instances for Persistence
  
  