MapColumn


@Target(allowedTargets = [AnnotationTarget.TYPE])
@Retention(value = AnnotationRetention.BINARY)
public annotation MapColumn


Declares which column is used to build a map or multimap return value in a Dao query method.

This annotation is required when the key or value of a Map (or nested map) is a single column of one of the built in types (primitives, boxed primitives, enum, String, byte[], ByteBuffer) or a type with a converter (e.g. Date, UUID, etc).

The use of this annotation provides clarity on which column should be used in retrieving information required by the return type.

Example:

@Query("SELECT * FROM Artist JOIN Song ON Artist.artistName = Song.artist")
fun getArtistNameToSongNames():
Map<@MapColumn(columnName = "artistName") String,
@MapColumn(columnName = "songName") List<String>>

@Query("SELECT *, COUNT(mSongId) as songCount FROM Artist JOIN Song ON
Artist.artistName = Song.artist GROUP BY artistName"
)
fun getArtistAndSongCounts(): Map<Artist, @MapColumn(columnName = "songCount") Integer>

Column(s) specified in the provided @MapColumn annotation must be present in the query result.

Summary

Public constructors

MapColumn(@NonNull String columnName, @NonNull String tableName)

Public methods

final @NonNull String

The name of the column to be used for the map's key or value.

final @NonNull String

The name of the table or alias to be used for the map's column.

Public constructors

MapColumn

public MapColumn(@NonNull String columnName, @NonNull String tableName)

Public methods

getColumnName

public final @NonNull String getColumnName()

The name of the column to be used for the map's key or value.

Returns
@NonNull String

The column name.

getTableName

public final @NonNull String getTableName()

The name of the table or alias to be used for the map's column.

Providing this value is optional. Useful for disambiguating between duplicate column names. For example, consider the following query: SELECT * FROM Artist AS a JOIN Song AS s ON a.id == s.artistId, then the @MapColumn for a return type Map<String, List<Song>> would be Map<@MapColumn(columnName = "id", tableName = "a") String, List<Song>>.

Returns
@NonNull String

The column table name.