Почему @OneToMany не работает с наследованием в, в спящем режиме

Вы можете использовать заполнители и feed_dict.

Предположим, что у нас есть такие массивы numpy:

trX = np.linspace(-1, 1, 101) 
trY = 2 * trX + np.random.randn(*trX.shape) * 0.33 

Вы можете объявить два заполнителя:

X = tf.placeholder("float") 
Y = tf.placeholder("float")

Затем используйте эти заполнители (X и Y) в вашей модели, стоимость и т. Д .: model = tf.mul (X, w) ... Y ... ...

Наконец, когда вы запускаете модель / стоимость, подавайте массивы numpy с помощью feed_dict:

with tf.Session() as sess:
.... 
    sess.run(model, feed_dict={X: trY, Y: trY})
6
задан Bill the Lizard 13 July 2013 в 12:52
поделиться

4 ответа

Я думаю, что это - мудрое решение, принятое Быть в спящем режиме командой. Они могли быть менее высокомерными и прояснить, почему это было реализовано этот путь, но это, как Emmanuel, Chris и Gavin работают.:)

Давайте попытаемся понять проблему. Я думаю, что Ваши понятия "лежат". Сначала Вы говорите, что много проблем связаны с Людьми. Но, затем Вы говорите, что у одного Человека есть многие UglyProblems (и не касается других проблем). Что-то неправильно с тем дизайном.

Вообразите, как это будет отображенным на базе данных. У Вас есть единственное наследование таблицы, таким образом:

          _____________
          |__PROBLEMS__|          |__PEOPLE__|
          |id <PK>     |          |          |
          |person <FK> | -------->|          |
          |problemType |          |_________ |
          -------------- 

Как, в спящем режиме, собираясь осуществлять базу данных, чтобы заставить проблему только коснуться Людей, если ее problemType равен? Это - очень трудная проблема для решения. Так, если Вы хотите этот вид отношения, каждый подкласс должен быть в своей собственной таблице. Это что @MappedSuperclass делает.

PS.: Извините за ужасный рисунок :D

4
ответ дан 8 December 2019 в 13:51
поделиться

К сожалению, согласно Быть в спящем режиме документации "Свойства от суперклассов, не отображенных, поскольку, @MappedSuperclass проигнорированы". Я столкнулся с этим также. Мое решение состояло в том, чтобы представить желаемое наследование через интерфейсы, а не сами компоненты сущности.

В Вашем случае Вы могли определить следующее:

public interface Problem {
    public Person getPerson();
}

public interface UglyProblem extends Problem {
}

Затем реализуйте эти интерфейсы с помощью абстрактного суперкласса и двух подклассов объекта:

@MappedSuperclass
public abstract class AbstractProblemImpl implements Problem {
    @ManyToOne
    private Person person;

    public Person getPerson() {
        return person;
    }
}

@Entity
public class ProblemImpl extends AbstractProblemImpl implements Problem {
}

@Entity
public class UglyProblemImpl extends AbstractProblemImpl implements UglyProblem {
}

Как дополнительное преимущество при кодировании использования интерфейсов, а не фактических компонентов сущности, которые реализуют те интерфейсы, это помогает изменить базовые отображения позже (меньше риска повреждающейся совместимости).

5
ответ дан 8 December 2019 в 13:51
поделиться

Я думаю, что необходимо аннотировать проблемный суперкласс @MappedSuperclass вместо @Entity.

1
ответ дан 8 December 2019 в 13:51
поделиться

I figured out how to do the OneToMany mappedBy problem.

In the derived class UglyProblem from the original post. The callback method needs to be in the derived class not the parent class.

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@ForceDiscriminator
public class Problem {

}

@Entity
@DiscriminatorValue("UP")
public class UglyProblem extends Problem {
    @ManyToOne
    private Person person;
}

@Entity
public class Person {
    @OneToMany(mappedBy="person")
    private List< UglyProblem > problems;
}

Found the secret sauce for using Hibernate at least. http://docs.jboss.org/hibernate/stable/annotations/api/org/hibernate/annotations/ForceDiscriminator.html The @ForceDiscriminator makes the @OneToMany honor the discriminator

Requires Hibernate Annotations.

0
ответ дан 8 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

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