2014-12-08 3 views
0

Привет всем Я стараюсь, чтобы мой класс сохранялся в моей базе данных, однако я столкнулся с проблемой, не уверен, как ее решить. Я пытаюсь сопоставить три экземпляра Score с моим пользователем, но я не уверен, как это заставить работать. Любая помощь приветствуется. Спасибо :)Отображение объектов JPA/openEJB для базы данных

Пользовательский класс Snipit.

@Column(name="userName", unique=true) 
private String username; 
@Column(name="password") 
private String password; 

//I am not sure how to map the three fields below. 
private Score highestScore; 
private Score averageScore; 
private Score lowestScore; 
+0

Is его оценка в любом случае отличается от общего числа? Если это так, вы должны сделать сопоставление -> onetone, manytone и т. Д. – Milkmaid

+0

Да, он содержит слова в минуту и ​​ошибки –

+0

Это может быть полезно [@OneToOne] (http://stackoverflow.com/questions/21762328/java-hibernate -onetoone-mapping) – Milkmaid

ответ

1

Хотя есть принят ответ здесь я не вижу, как предлагаемое отображение различает высокие, низкие и средние баллы?

Вы могли бы рассмотреть вопрос об использовании карты, например, как показано ниже, где таблица оценка будет иметь столбец «score_type», который может быть сопоставлен с ENUM «ScoreType»:

public class User{ 

    @Column(name="userName", unique=true) 
    private String username; 

    @Column(name="password") 
    private String password; 

    @OneToMany 
    @MapKeyColumn(name="score_type") 
    @MapKeyEnumerated 
    private Map<ScoreType, Score> scores; 

    public Score getHighScore(){ 
     return scores.get(ScoreType.HIGH); 
    } 

    public void setScore(Score score){ 
     score.setUser(this); 
     scores.put(score.getType(), score); 
    } 
} 

и

public class Score{ 

    @ManyToOne 
    @JoinColumn(name = "user_id") 
    private User user; 

    @Column(name = "type") 
    @Enumerated(EnumType.String)//or ordinal 
    private ScoreType type; 
} 
0

если оценка не связана с базой данных, используйте @Transient аннотацию для очков

если оценка связана с базой данных, использование отображения аннотаций, таких как @OneToOne, @OneToMany (зависит от вашей мощности базы данных)

EDIT: если оценка относится к таблице базы данных, ИМХО самый простой путь пусть IDE автоматически генерировать объект из базы данных для вас (но иногда IDE может генерировать нежелательное отображение, так что вам еще нужно проверить его)

если вы Использование Eclipse Generating entities from tables

если вы используете NetBeans Adding Entity Classes

но вы должны знать о Multiplicity in Entity Relationships

+0

Я хочу, чтобы таблица имела три столбца, так что один к одному ... как бы им не удалось определить, как это отобразить ... –

+0

Там должен быть посредник Таблица не существует –

+0

@Devin, зачем вам промежуточную таблицу? Вы можете просто ссылаться на таблицу баллов из Snipit, если нет отношения ManyToMany. – iozee

0

В моей точки зрения пользователя есть один счет и счет у одного пользователя. Таким образом, @OneToOne User - это собственная сторона и двунаправленная.

код должен выглядит следующим образом

в Score:

@OneToOne(mappedBy = "score") 
private User user 

в Пользователь:

@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) 
@PrimaryKeyJoinColumn 
private Score highestScore; 
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) 
@PrimaryKeyJoinColumn 
private Score averageScore; 
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) 
@PrimaryKeyJoinColumn 
private Score lowestScore; 
+0

, объявленный, что он отображается «счетом», но это не поле связанного типа. –

+0

Проверьте это, это должно помочь вам [@OneToOne] (http://uaihebert.com/jpa-onetoone-unidirectional-and-bidirectional/) – Milkmaid

+0

Как это отличает High, Low, Average? –