Question: I have two entities with following relationShip (these entities are taken for example purpose only)

```
public class Entity
{
    public long ID { get; set; }
}

public class Doctor : Entity
{
    public string Name {get; set;}
    public string sprcialization { get; set;}
    public string Icollection<JrDoctor> childDoctors { get; set;}
}

public class JrDoctor : Entity
{
    public long? DoctorId { get; set;}
    public virtual Doctor Doctor { get; set;}

    public long? JuniorDoctorId { get; set;}
    [ForeignKey("JuniorDoctorId")]
    public virtual Doctor JuniorDoctor { get; set;}
}

```

this relationship in entityframework is creating an extra column Doctor\_Id in JrDoctor table. Why is it so? and how can I avoid it using data annotations.

Answer: 
There is a Kotlin compiler plugin for lombok. **It is still experimental** and it can be used with **Gradle** or **Maven**.

It only supports a hand full of annotations, including

* `@Getter`, `@Setter`
* `@NoArgsConstructor`, `@RequiredArgsConstructor`, and `@AllArgsConstructor`
* `@Data`
* `@With`
* `@Value`

Seem to work as expected. Unfortunately, they do not support the `@Builder` annotation but you can request to be added in [YouTrack](https://youtrack.jetbrains.com/issue/KT-46959)

See the [Lombok compiler plugin](https://kotlinlang.org/docs/lombok.html) in the kotlin documentation for more information.

Update 1
--------

The `@Builder` annotation ticket mentioned above has been fixed! The target version for the fix is `1.8.0-Beta`.
To add to Sergey Mashkov's response (adding here I don't have enough rep points to comment on it), here's an [example app](https://github.com/rojiani/kotlin-lombok-integration) of a Gradle multi-project setup where Kotlin can see the Lombok-generated code (without kapt or delomboking. Caveats do apply - namely, Kotlin can call the Java code, but Java can't call the Kotlin code in that particular module (as this would create a circular dependency). This kind of build might be suitable if you have an existing Java codebase and all new code is written in Kotlin, though.

I would love to see full Lombok/Kotlin support, however. While Kotlin is fully interoperable with Java, the reality is that Lombok is very widely used, and this issue may prevent a large number of developers who would like to switch to Kotlin from doing so.