У Вас есть общий базовый класс для, в спящем режиме объекты?

typedef typename Tail::inUnion dummy;

Однако я не уверен, что реализация inUnion верна. Если я правильно понимаю, этот класс не должен быть создан, поэтому вкладка «fail» никогда не будет автоматически терпеть неудачу. Возможно, было бы лучше указать, находится ли тип в объединении или нет с простым булевым значением.

template  struct Contains;

template 
struct Contains >
{
    enum { result = Contains::result };
};

template 
struct Contains >
{
    enum { result = true };
};

template 
struct Contains
{
    enum { result = false };
};

PS: Посмотрите на Boost :: Variant

PS2: посмотрите на typelists , особенно в книге Андрея Александреску: Modern C ++ Design

20
задан Răzvan Flavius Panda 28 September 2011 в 14:10
поделиться

4 ответа

Это хорошо работает для нас. А также идентификатор и дата создания, у нас также есть измененная дата. У нас также есть промежуточное звено TaggedBaseEntity, который реализует интерфейс Taggable, потому что некоторые объекты нашего веб-приложения имеют теги, как вопросы на Переполнении стека.

5
ответ дан 30 November 2019 в 01:31
поделиться

Тот, который я использую, должен, прежде всего, реализовать хэш-код () и равняется (). Я также добавил метод к структурной распечатке программы объект. В ответ на DR выше, может быть переопределена большая часть из этого, но в моей реализации Вы застреваете с идентификатором типа Long.

public abstract class BaseEntity implements Serializable {

    public abstract Long getId();
    public abstract void setId(Long id);

    /**
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
        return result;
    }

    /**
     * @see java.lang.Object#equals(Object)
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        BaseEntity other = (BaseEntity) obj;
        if (getId() == null) {
            if (other.getId() != null)
                return false;
        } else if (!getId().equals(other.getId()))
            return false;
        return true;
    }

    /**
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return new StringBuilder(getClass().getSimpleName()).append(":").append(getId()).toString();
    }

    /**
     * Prints complete information by calling all public getters on the entity.
     */
    public String print() {

        final String EQUALS = "=";
        final String DELIMITER = ", ";
        final String ENTITY_FORMAT = "(id={0})";

        StringBuffer sb = new StringBuffer("{");

        PropertyDescriptor[] properties = PropertyUtils.getPropertyDescriptors(this);
        PropertyDescriptor property = null;
        int i = 0;
        while ( i < properties.length) {

            property = properties[i];
            sb.append(property.getName());
            sb.append(EQUALS);

            try {
                Object value = PropertyUtils.getProperty(this, property.getName());
                if (value instanceof BaseEntity) {
                    BaseEntity entityValue = (BaseEntity) value;
                    String objectValueString = MessageFormat.format(ENTITY_FORMAT, entityValue.getId());
                    sb.append(objectValueString);
                } else {
                    sb.append(value);
                }
            } catch (IllegalAccessException e) {
                // do nothing
            } catch (InvocationTargetException e) {
                // do nothing
            } catch (NoSuchMethodException e) {
                // do nothing
            }

            i++;
            if (i < properties.length) {
                sb.append(DELIMITER);
            }
        }

        sb.append("}");

        return sb.toString();
    }
}
5
ответ дан 30 November 2019 в 01:31
поделиться

Я не смущался бы использовать общий базовый класс, в конце концов, в этом суть отображения O/R.

я использую общие базовые классы также, но только если объекты совместно используют по крайней мере некоторую общую собственность. Я не буду использовать его, если идентификатор будет единственной общей собственностью. До сих пор я не встретился ни с какими проблемами.

1
ответ дан 30 November 2019 в 01:31
поделиться

Вы можете найти Некоторые образцы здесь

http://blogsprajeesh.blogspot.com/2010/01/nibernate-defining-mappings-part-4.html

-1
ответ дан 30 November 2019 в 01:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: