У меня проблема с извлечением данных из таблицы, которая не содержит первичного ключа (Слабая сущность). У меня есть две таблицы - Data
и Prescription
. В Prescription
есть первичный ключ - token_id
, а Data
содержит более 1 строки, содержащей различные типы информации об одном token_id
. Как я могу это сделать?
Я не могу добавить первичный ключ к таблице. Таблица предоставлена мне, поэтому я не могу это изменить.
Я пытался и следовал некоторым учебникам на YouTube, но это не сработало. Я также проверил некоторые ответы в stackoverflow, но это не похоже на мою структуру API. Я полностью застрял. Я попытался использовать @MantToOne
, как показано в руководстве, а затем использовать репозиторий для функции, но это, похоже, не работает.
У меня есть два модельных класса -
Data.java
@Repository
@Entity
@Table(name="data")
public class Data {
@Column(name="ticket_no")
private String ticket_no;
@Column(name="type")
String type;
@Column(name="unit")
private String unit;
@Column(name="value")
private float value;
@ManyToOne
private Prescription pres;
//getters and setters
}
Prescription.java
@Entity
@Table(name="prescriptions")
public class Prescription {
@Id
@Column(name="ticket_no")
private String ticket_no;
@Column(name="description")
String description;
@Column(name="download_link")
private String download_link;
//getters and setters
Два хранилища: DataRepository.java
public interface DataRepository extends JpaRepository<Data, String> {
public List<Data> findByPrescriptionTicket_no(String token);
}
PrescriptionRepository.java
public interface PrescriptionRepository extends JpaRepository<Prescription, String> {
}
Два Дао Класса: DataDao.java
@Service
public class DataDao {
@Autowired
DataRepository datarepo;
public List<Data> findOne(String token) {
List<Data> meddat=new ArrayList<>();
datarepo.findByPrescriptionTicket_no(token).forEach(meddat::add);
return meddat;
}
}
PrescriptionDao.java
@Service
public class PrescriptionDao {
@Autowired
PrescriptionRepository presrepo;
public Prescription findOne(String token) {
return presrepo.findOne(token);
}
}
Класс контроллера
@RestController
@RequestMapping(value = "/rest/users")
public class MainController {
@Autowired
DataDao datadao;
@Autowired
PrescriptionDao presdao;
@Autowired
ProcessData pd;
@GetMapping("/persons")
public String loadPersons(@RequestParam("access_token") String access_token) throws ParseException{
String decode_token = pd.testDecodeJWT(access_token);
String token = pd.jsondata(decode_token);
String pres=presdao.findOne(token).toString();
List<Data> med= datadao.findOne(token);
String tot_data= "{"+"\"medical_data\":"+med+","+"\"hb_prescription\":"+pres+"}";
return tot_data;
}
}
Я фактически преобразовал всю программу из простой выборки данных из двух таблиц в эту, так что может быть более одной ошибки. Я новичок в этой концепции, но я должен сделать это для представления проекта.
Если результат находится в списке данных, это было бы здорово.
Заранее спасибо.