All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.aerospike.mapper.annotations.AerospikeEmbed Maven / Gradle / Ivy

package com.aerospike.mapper.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Bins marked with AerospikeEmbed will have the objects they reference embedded in the parent object, either as a list or a map
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface AerospikeEmbed {

	enum EmbedType {
		LIST,
		MAP,
		DEFAULT
	}

	EmbedType type() default EmbedType.DEFAULT;
	/**
	 * The elementType is used for sub-elements. For example, if there is:
	 * 
	 * @AerospikeBin
	 * @AerospikeEmbed(elementType = EmbedType.LIST)
	 * private List accounts;
	 * 
* then the objects will be stored in the database as lists of lists, rather than lists of maps. */ EmbedType elementType() default EmbedType.DEFAULT; /** * Determine whether the key should be saved in the sub-object. This is used only for translating * a list of objects in Java into a map of objects which contains a list. For example:

*

	 * public class Transaction {
	 *    private String name;
	 *    private int value;
	 *    @AerospikeKey
	 *    private long time;
	 *    
	 *    public Transaction() {}
	 *    public Transaction(String name, int value, long time) {
	 *        super();
	 *        this.name = name;
	 *        this.value = value;
	 *        this.time = time;
	 *    }
	 * }
	 * 
	 * ...
	 * 
	 * @AerospikeEmbed(type = EmbedType.MAP, elementType = EmbedType.LIST)
	 * public List<Transaction> txns;
	 * 
* * Assume elements have been inserted into the list as follows: *
	 *  account.txns.add(new Transaction("details1", 100, 101));
	 *  account.txns.add(new Transaction("details2", 200, 99));
	 *  account.txns.add(new Transaction("details3", 300, 1010));
	 * 
* * Since these elements are stored in a map, the AerospikeKey field (time in this case) will be the key to the map. * By default, the key is then dropped from the list as it is not needed, resulting in: *
	 * KEY_ORDERED_MAP('{99:["details2", 200], 101:["details1", 100], 1010:["details3", 300]}')
	 * 
* * If it is desired for the key to be part of the list as well, this value can be set to true: * *
	 * @AerospikeEmbed(type = EmbedType.MAP, elementType = EmbedType.LIST, saveKey = true)
	 * public List<Transaction> txns;
	 * 
* * This would result in: *
	 * KEY_ORDERED_MAP('{99:["details2", 99, 200], 101:["details1", 101, 100], 1010:["details3", 1010, 300]}')
	 * 
*/ boolean saveKey() default false; }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy