Skip to content

Commit

Permalink
Clarify that index has precedence
Browse files Browse the repository at this point in the history
Closes gh-940
  • Loading branch information
jzheaux committed Oct 11, 2024
1 parent 3d929dd commit a786687
Showing 1 changed file with 60 additions and 1 deletion.
61 changes: 60 additions & 1 deletion src/docs/asciidoc/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -1091,10 +1091,69 @@ The `@Attribute` annotation is used to map object class fields to entity fields.

The `@DnAttribute` annotation is used to map object class fields to and from components in the distinguished name of an entry.
Fields annotated with `@DnAttribute` are automatically populated with the appropriate value from the distinguished name when an entry is read from the directory tree.

Consider a class with the following annotation:

[tabs]
======
Java::
+
[source,java,role="primary"]
----
@DnAttribute(name="uid")
String uid;
----
=====

and a DN like the following:

====
[source,bash]
----
uid=carla,dc=springframework,dc=org
----
====

Then Spring LDAP will populate `uid` using `uid=carla` instead of looking for a `uid` attribute.

[NOTE]
----
Only fields of type `String` can be annotated with `@DnAttribute`. Other types are not supported.
If the `index` attribute of all `@DnAttribute` annotations in a class is specified, the DN can also be automatically calculated when creating and updating entries.
----

You can alternatively supply an index like so:

[tabs]
======
Java::
+
[source,java,role="primary"]
----
@DnAttribute(index=1)
String uid;
@DnAttribute(index=0)
String department;
----
=====

which is handy for DNs that have multiple components:

====
[source,bash]
----
uid=carla,department=engineering,dc=springframework,dc=org
----
====

Using an `index` also allows Spring LDAP to compute the DN for you when creating or locating an entity for update or deletion.
For update scenarios, this also automatically takes care of moving entries in the tree if attributes that are part of the distinguished name have changed.

[NOTE]
----
Note that while both attributes are present on `@DnAttribute`, if `index` is specified, then `name` is ignored.
----

The `@Transient` annotation indicates that the field should be ignored by the object directory mapping and not mapped to an underlying LDAP property. Note that if a `@DnAttribute` is not to be bound to an `Attribute`. That is, it is only part of the Distinguished Name and not represented by an object attribute. It must also be annotated with `@Transient`.

=== Execution
Expand Down

0 comments on commit a786687

Please sign in to comment.