2015-03-23 2 views
0

У меня есть два типа сущностей, Server и ServerStatus.Как сделать отношение в сущности к последней сущности другого типа объекта путем аннотации в JPA?

Server имеет @OneToMany отношение к ServerStatus.

Два объекта является следующим:

@Entity 
@Data 
public class Server { 

    @Id 
    @GeneratedValue 
    private Long id; 

    private String hostname; 
    private String ipAddress; 

    // Is it possible to make a relation by annotation? 
    //private ServerStatus latestStatus; 

} 

@Entity 
@Data 
public class ServerStatus { 

    @Id 
    @GeneratedValue 
    private Long id; 

    @ManyToOne 
    private Server server; 

    private boolean alive; 

    private Date collectedTime; 

    @PrePersist 
    public void onCreate() { 
     setCollectedTime(new Date()); 
    } 

} 

Можно ли сделать latestStatus иметь последнюю сущность из ServerStatus?

Это образец проекта на этот вопрос:

https://github.com/izeye/samples-spring-boot-branches/tree/jpa

ответ

2

Да и нет. Вы хотите, чтобы lastStatus автоматически обновлялся до последних данных или вы хотите управлять им самостоятельно.

Если вы хотите сделать это автоматически, то нет, потому что последние данные являются результатом поиска самой высокой даты. Но вы можете добавить дополнительный метод в свой DAO, чтобы выбрать правильный для вас и установить его там.

Но если вы счастливы, чтобы сохранить трек самостоятельно, то просто добавить

@OneToOne 
@JoinColumn(name="LATEST_ID") 
ServerStatus latestStatus; 

И DONT добавить mappedby. Но вы отвечаете за последние данные. Всякий раз, когда вы добавляете новый сервер, вам нужно установить новое значение на сервере. Его не собирают по дате.

+0

Спасибо! Ваш ответ отвечает моим потребностям, хотя я надеялся сделать это автоматически с первого взгляда. Думаю, это невозможно или даже невозможно. –

Смежные вопросы